setup.py方式打包自己的python代码并可以用pip install安装

2023-10-28

setup.py方式打包自己的python代码并可以用pip install安装

所需文件及目录规范

注意setup.py文件和MANIFEST.in文件需要放在和你需要打包的目录同一级下,例如我这里需要打包的就是webconsole文件夹(这里webconsole文件夹指的是业务代码文件夹也就是我下图圈出来的文件夹,而不是最外层那个webconsole项目目录文件夹,因为我这里起了相同的文件夹名称,怕各位混淆所以解释一下)。静态文件最好也放在同一级目录下,当然放在webconsole这种业务文件夹内部也是可以的,这个具体看需求情况。
在这里插入图片描述
上面那张图大家就先大概明确一下具体是干什么的, 我后面调整了目录结构, 将static文件夹和templates文件夹都放到了业务代码webconsole文件夹下, 这里解释下为什么, 如果像我上图一样的话,最后打包完, pip install 自己的包, 那么static| templates| webconsole 这三个文件夹就会分散在各处,而不是都在一个webconsole包下.

我后面的内容都会以下图的目录结构来讲解
在这里插入图片描述

示例演示

这里是指定我需要把这两个文件夹下的文件打包进去, 其中websocket/static/** 指的是业务文件夹websocket下的static文件夹下所有的文件包括子文件夹递归所有文件,
websocket/templates/* 指的是业务文件夹websocket下的, 不递归子文件夹
在这里插入图片描述

其中MANIFEST.in文件的语法如下图所示,具体内容参考官方文档
在这里插入图片描述
下面的的setup文件没什么好说的,网上有很多解释,稍微贴一点用到的

setup() 函数中的部分参数含义如下:

name:包的名称。
version:包的版本号。
description:包的简要描述。
packages:包含的模块或包的列表。
install_requires:该包所依赖的其他包。
classifiers:该包适用的 Python 版本、支持的操作系统、遵循的协议等信息。

在这里插入图片描述

打包命令需要在项目文件夹下,以我的项目为例也就是项目文件webconsole目录下,执行命令

python setup.py sdist bdist_wheel

在这里插入图片描述

完成后会在项目文件夹下生成一个dist文件夹,里面包含了两个文件,如图所示
在这里插入图片描述

如果改动了上面打包的两个文件,setup.py文件和MANIFEST.in,那么一定一定一定要先删除下图的这个文件夹,不然打包还是用的上一次的配置,这点很坑!!!
在这里插入图片描述

打包静态文件补充说明

这里再解释一下把静态资源打包进去的问题. 首先明确一下,我需要打包的是我的业务代码文件夹webconsole下的所有东西, 以及最外层的项目文件夹webconsole下的templates和static目录下的所有东西

这里有两个点需要注意下, 第一个是你想打包静态文件首先要能扫描到你的文件夹, 这里setup.py中的packages我写的是find_packages(), 而把webconsole注释掉了, 是因为我想要扫描项目文件夹webconsole下的所有文件夹及内容, 这样保险一点.
如果只想要webconsole业务文件下的文件,其余的不需要, 那就写webconsole就行了

然后我需要将静态文件打包进去,有两种方式:

第一种是在setup.py的package_data中指定

注意这里的 static/** 指的是static文件夹下所有递归的文件都会被放进去, 而templates/* 这个只有一个 * 星号指的是就只放templates下的文件,不递归其内部的文件夹 当然这里的 static 文件夹和 templates文件夹都是指的前面一步 setup.py文件中 packages 这一属性所扫描到的包下的内容文件
在这里插入图片描述

第二种方式就是在MANIFEST.in文件中指定, 此时setup.py中的package_data属性就可以注释掉了,只需要在MANIFEST.in文件中写include规则,如下图,(不推荐,虽然可以把静态文件打包到包里,但是pip install的时候,包里面的一部分静态文件install进去了,一部分没有install进去,不知道为啥,有兴趣的可以自行研究

在这里插入图片描述

引用自己打的包

在其他项目中如果想引用自己打的包,那么直接pip install tar包文件路径,就可以把自己的包引入进项目里了。

pip install /path/to/your/package/dist/mypackage-0.1.0.tar.gz

如果pip install报错No module named ‘setuptools.command.build’,那么可能是setup版本过高或过低,我这边是过高了,所以卸载了原来的版本(67.6.0)重新装了个低版本(65.6.3)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setup.py方式打包自己的python代码并可以用pip install安装 的相关文章

  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • python的_random是什么?

    如果你打开random py看看它是如何工作的 它的类Random子类 random Random import random class Random random Random Random number generator base
  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • 计算温度的偏导数(温度的水平平流)

    我想知道哪种方法计算x和y方向温度的偏导数 温度的水平平流 最正确 第二个代码使用温度 纬向风和经向风的数据矩阵 提取温度 T 纬向风分量 u 和经向风分量 v 的数据 import matplotlib pyplot as plt imp
  • 在 python + Flask + Gunicorn + nginx + Compute Engine 应用程序中从 Google Cloud Storage 读取文件失败

    在 python Flask Gunicorn nginx Compute Engine 应用程序中读取从 Google Cloud Storage 下载的文件失败 代码链接 https github com samuq CE test h
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 确定Python模块中的函数是否可用

    我正在研究一些使用Python套接字的代码socket fromfd http docs python org library socket html socket fromfd功能 但是 此方法并非在所有平台上都可用 因此我正在编写一些后
  • Python MySQL 模块

    我正在开发一个需要与 MySQL 数据库交互的 Web 应用程序 但我似乎找不到任何真正适合 Python 的模块 我特别寻找快速模块 能够处理数十万个连接 和查询 所有这些都在短时间内完成 而不会对速度产生重大影响 我想我的答案将是游戏领
  • 将列表传递给 PyCrypto 中的 AES 密钥生成器

    我尝试使用 Pycrypto 生成 AES 密钥 但收到以下错误 类型错误 列表 不支持缓冲区接口 对于以下声明 aescipher AES new mykey AES MODE ECB mykey 属于类型list并包含 18854347
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • Git在Windows中的克隆比在Linux中慢得多

    我一直在追寻 Windows 上 github 克隆速度极慢的问题 Linux kali 没有这个问题 我的下行连接速度为 100 40 megabit s 我可以获得接近 8mb s 的下载速度 没有问题 我已将电脑直接插入互联网插座 无
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • Python 函数可能会引发哪些异常? [复制]

    这个问题在这里已经有答案了 Python 中有什么方法可以确定 内置 函数可能引发哪些异常 例如 文档 http docs python org lib built in funcs html http docs python org li
  • 不重复的Python组合

    我有一个数字列表 我想从中进行组合 如果我有清单 t 2 2 2 2 4 c list itertools combinations t 4 结果是 2 2 2 2 2 2 2 4 2 2 2 4 2 2 2 4 2 2 2 4 但我想得到
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • 避免在列表理解中计算相同的表达式两次[重复]

    这个问题在这里已经有答案了 我在列表理解中使用一个函数和一个 if 函数 new list f x for x in old list if f x 0 令我恼火的是这个表达f x 在每个循环中计算两次 有没有办法以更清洁的方式做到这一点
  • Beautiful Soup 获取动态表数据

    我有以下代码 url https www basketball reference com leagues NBA 2017 standings html all expanded standings html urlopen url so
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha

随机推荐

  • JavaWeb中servlet到底是干什么的

    JavaWeb中servlet到底是干什么的 javaweb工程包括 src下的 java文件WebRoot下的 jsp js等文件当工程运行时 tomcat先把 jsp gt java gt class 计算机只识别 class文件ser
  • andoid逐帧动画oom_帧动画内存OOM?不存在的!—— SurfaceView逐帧解析

    Android 提供了AnimationDrawable用于实现帧动画 在动画开始之前 所有帧的图片都被解析并占用内存 一旦动画较复杂帧数较多 在低配置手机上容易发生 OOM 即使不发生 OOM 也会对内存造成不小的压力 下面代码展示了一个
  • react小书,怎么渲染列表(react)

    在我们处理数据时 假如我们现在有一个用户列表存放到数组中 const users username Jerry age 21 gender male username Tomy age 22 gender male username Lil
  • java解决高并发之数据库连接池配置

    使用的IDE是IDEA 项目是springboot框架的项目 最近一直在处理高并发的问题 大致情况是这样的 大概有五六千人会在中午十二点同时访问网站 操作数据库 导致服务器崩溃 对于频繁修改数据的这种情况 例如 用户要抢商品 且抢完后要刷新
  • kuiper安装

    1 使用docker方式安装 docker pull lfedge ekuiper latest docker run p 9081 9081 d name kuiper e MQTT SOURCE DEFAULT SERVER tcp 1
  • [Android studio] 第15节 ConstraintLayout控件

    ConstraintLayout 是 Android 中的布局容器 它是一个灵活且强大的布局工具 用于创建复杂的界面布局 它通过使用约束 constraints 来定义子视图之间的关系和对齐方式 以下是 ConstraintLayout 常
  • 【计算机网络】301 永久重定向的缓存问题

    301 永久重定向的缓存问题 问题描述 在使用 301 的时候常常会遇到一个问题 当服务端针对某个 URL 设置了 301 永久重定向后 不管怎么重新设置或者删除设置 浏览器在进行访问时仍然会使用最开始缓存的 301 重定向 而服务端无法控
  • Centos7搭建bsc全链节点

    Centos7搭建bsc全链节点 服务器配置 CPU 8 Cores 16 Threads RAM 131072 MB Storage 2x 2000GB NVMe Bandwidth 8400 65 GB of 10000 GB OS C
  • 如何打开电脑的服务选项

    1 首先找到此电脑 我的电脑 单击鼠标右键 找到管理选项 单击 管理 2 现在 打开服务设置对话框 在左侧菜单栏找到 服务和应用程序 打开下拉菜单 在下拉菜单 单击 服务 打开计算机内所有的服务 3 单击服务 打开所有的服务选项 在右面栏里
  • 电子学会 青少年软件编程(202209)(C语言)(树&堆&图)等级考试(七级)试题 T3 Sequence

    T3 Sequence 2442 Sequence Sequence Poj2442 堆 优先队列 Sequence Poj2442 堆 优先队列 Magic的博客 CSDN博客 sequence poj2442 POJ 2442 二叉堆
  • LVS+Keepalived群集

    目录 一 keepalived介绍 二 Keepalived及其工作原理 三 Keepalived原理剖析 四 Keepalived体系主要模块及其作用 实例 NFS服务器 192 168 80 200 主DR 服务器 192 168 30
  • TensorFlow2(版本2.5.0)学习笔记(含keras_bert、W2V)

    目录 一 设置CPU GPU运行环境 二 tf定义变量与简单操作 基于tf2做数据处理 Tokenizer 1 使用TF2实现token2id padding 2 基于gensim 版本 3 8 3 3 基于keras bert bert4
  • threejs物理效果和声音

    个人博客地址 https cxx001 gitee io 一 Threejs中如何创建物理场景 threejs中创建物理场景我们用它的扩展库 Physijs 它可以使场景中的对象有重力效果 可以相互碰撞 施加力之后可以移动 还可以通过合页和
  • Java 导入验证数据最后一行

    description 判断数据最后一行 author lkm date 2023 7 13 17 11 public static boolean isEmptyRow Row row if row null row toString i
  • python安装模块速度太慢了,教你一招提升百倍安装速度

    在python开发中 经常需要使用到各种各样的库 pip又是我们常用的安装工具 但是国外的源下载速度实在太慢 经常导致超时 对于这种情况我们可以修改pip的下载源为国内源 这样就可以大幅度提升下载速度 如何修改源 1 临时更换镜像源 可以通
  • 【代码实践】使用Garch模型估计VaR

    title Value at Risk estimation using GARCH model author Ionas Kelepouris Dimos Kelepouris date July 6 2019 output html d
  • 神经网络基础04-25个神经网络模型

    参考链接 https www toutiao com i6432188985530909186 前言 神经元 卷积神经元 Convolutional cells 和前馈神经元非常相似 除了它们只跟前一神经细胞层的部分神经元有连接 因为它们不
  • G - Card Game

    G Card Gamehttps vjudge csgrandeur cn problem Gym 102263G Zeyad and Ehab are playing a simple card game each player init
  • FISCO BCOS(十六)——— ubuntu安装go语言环境

    1 创建安装目录 mkdir home go 2 下载go安装包 wget https golang google cn dl go1 17 8 linux amd64 tar gz 3 解压go安装包 sudo tar zxvf go1
  • setup.py方式打包自己的python代码并可以用pip install安装

    setup py方式打包自己的python代码并可以用pip install安装 所需文件及目录规范 示例演示 打包静态文件补充说明 引用自己打的包 所需文件及目录规范 注意setup py文件和MANIFEST in文件需要放在和你需要打