【Django】打包项目上传至pypi,并使用pip下载

官方文档:描述python项目如何打包,建议通读
因为Django项目不同于一般的python包,要在与manage.py同级目录下新建__init__.py文件,不然setuptools并不会将项目中的文件打包。(猜测setuptools有自己的识别文件是否需要打包的方式,没有__init__.py它就不觉得这是需要打包的文件,就不会对它打包。所以它也不会进一步进其他目录看看是否有.py文件)

使用 setup.py 将 Python 库打包分发到 PyPI 踩坑指南
这篇文章讲了作者如何打包Django项目的,可以一看。另外里面也有对include_package_data参数和package_data参数的理解。里面部分解释了我上面的问题,setup.py只打包python包,跟python包无关的其他文件默认情况下是不打包的,要另外设置。而且作者的django项目是没有manage.py的,直接是我项目的子文件那种结构。嗯这点还是不太能参考。我主要担心加了那个多余的__init__.py文件会对我的项目日后运行产生影响。

打包前期准备

1、为了打包的整个流程要下载的包
python -m pip install --user --upgrade setuptools wheel twine

setuptools:打包用的
wheel:生成.whl文件用的
twine:上传包用的

2、打包需要的说明文件

参考官方文档

MANIFEST.in
本文件的存在意义是,setup.py只会打包.py文件。但我们可能需要一些其他文件来支持整个项目的运行,可以把需要打包的其他文件都写入该文件中。
在setup.py文件中的package_data参数所做的事其实跟MANIFEST.in差不多,但package_data(根据官方文档的说法来看)能更精准一点?
编写规范:
注意:里面文件的相对路径都是基于setup.py文件所在目录的,并不是python项目的目录!我之前写错了,打包了好多次都提示我no files found matching,我还以为是语法写错了,其实是路径写错了。
参考:
官方文档-描述MANIFEST.in文件的作用
官方文档-描述MANIFEST.in的语法

include *.txt
recursive-include examples *.txt *.py
prune examples/sample?/build
  • include all files in the distribution root matching *.txt,
  • all files anywhere under the examples directory matching *.txt or *.py
  • exclude all directories matching examples/sample?/build
    在这里插入图片描述

打包包:

在有setup.py所在目录下cmd
sdist是构建源码发布包的意思
python setup.py sdist bdist_wheel:生成.whl+.tar.gz
python setup.py sdist --formats=gztar,zip:生成.tar.gz+.zip

上传包:

在有setup.py所在目录下cmd
python -m twine upload --repository testpypi dist/*

安装包:

1、普通安装
上传只有zip文件时,在site package下也会有已经解压好的miniserver源程序文件夹
上传whl+tar.gz时,下载的结果时一模一样的。miniserver源程序文件夹存在
pip install -i https://test.pypi.org/simple/ example-pkg-Aileen==0.0.1

2、安装在指定路径下(跟普通安装文件夹是一样的,一个.egg-info文件夹,一个打包时的源工程文件夹(名字也一模一样))
也就是说除了存放路径改变,其他都没变
但是出现问题,当使用pip list或卸载包的时候,python都提示并没有这个包(猜测:python也是根据路径去寻找已经安装的包并显示,而不安装在原有路径下后,新路径并没有在python已有查询路径中)
pip install --target=C:\Users\Cntech\Desktop\test package_name

问题整理

  • 能否安装在固定目录下
    可以,但有遗留问题。如pip list,pip uninstall无法识别该包
  • .tar.gz样式也会在安装时自动解压吗
    可以,好像在windows下也可以成功解压?
  • files文件夹如何附加在安装包中
    用package_data或者MANIFEST.in
    data_files与它的区别:官方文档对data_files的解释。就算zip压缩不报错,安装时生成whl也会报错
  • 学习一下package_data等参数的具体,查看是否能够在不加__init__.py文件的情况下打包整个项目
    setuptools官网对添加data files文件的文档
    放弃在不加__init__.py的情况下打包整个项目,有违python包的初衷。也发现了正常打包一个django项目时,manage.py文件其实不需要。现在有发现,它还是需要的,数据库的迁移都要用这个,接下来看看数据库的改变如果能不用这个文件实现,就可以不放进去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值