如何将原始Python包上传到PyPI?

10 投票
1 回答
3235 浏览
提问于 2025-04-15 11:13

有什么神奇的命令 "python setup.py some_incantation_here" 可以把一个包上传到PyPI,并且让人们可以下载到原始的包吗?

我有一个包,里面有一些源代码和几个图片文件(作为包数据)。如果我执行 "setup.py sdist register upload",生成的 .tar.gz 文件会把图片文件排除在外。如果我执行 "setup.py bdist_egg register upload",生成的 egg 文件里有图片,但却把 setup.py 文件排除了。我想上传一个包含我整个项目的文件,也就是 "setup.py the_whole_freaking_thing register upload"。

也许最好的办法是手动把我的项目目录打包成 tar.gz 文件,然后通过 PyPI 的网页界面上传?

注意:我想避免把我刚创建的简单项目同时存储在我的 SVN 仓库和 PyPI 上,因为在两个地方跟踪它的历史和文件感觉很浪费时间。

1 个回答

16

当你执行“sdist”命令时,决定哪些文件会被包含在内的是你旁边的“setup.py”文件中的“MANIFEST.in”文件,而不是你在“package_data”中列出的内容。这和现在Python打包工具的复杂性有关;“sdist”是由标准库中的distutils支持的,而“bdist_egg”则是由setuptools模块控制的。

要解决这个问题,可以尝试在你的setup.py文件旁边创建一个MANIFEST.in文件,并给它添加如下内容:

include *.jpg

当然,我假设你的“图片文件”是真正的照片,而不是磁盘映像或ISO映像之类的东西;如果我猜错了,你可能需要调整上面的内容!不过可以查看一下distutils文档中关于指定要分发的文件的部分,看看能不能让那些文件出现在你的.tar.gz源分发包中!祝你好运。

撰写回答