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

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)。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RayCheungQT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值