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

Posted

技术标签:

【中文标题】如何将原始 Python 包上传到 PyPI?【英文标题】:How to upload a pristine Python package to PyPI? 【发布时间】:2010-10-21 05:00:06 【问题描述】:

有什么神奇的“python setup.py some_incantation_here”命令以可以下载的形式将包上传到 PyPI 以获取原始形式的原始包?

我有一个包含一些源代码和一些图像文件的包(如 package_data)。如果我执行“setup.py sdist register upload”,则 .tar.gz 会排除图像文件。如果我执行“setup.py bdist_egg register upload”,则鸡蛋包含图像但不包括 setup.py 文件。我希望能够上传一个文件,它只是我的整个项目——也就是“setup.py the_whole_freaking_thing register upload”。

也许最好的方法是手动 tar.gz 我的项目目录并使用 PyPI Web 界面上传?

警告:我试图避免将我刚刚创建的简单项目存储在我的 SVN 存储库和 PyPI 中——在两个地方跟踪其历史记录和文件似乎是浪费工作。

【问题讨论】:

【参考方案1】:

当您执行“sdist”命令时,控制包含文件列表的是位于“setup.py”旁边的“MANIFEST.in”文件,而不是“package_data”中列出的任何内容。这与当今 Python 打包解决方案的精神分裂性有关。 “sdist”由标准库中的distutils提供支持,而“bdist_egg”由setuptools模块控制。

要解决此问题,请尝试在 setup.py 文件旁边创建一个 MANIFEST.in,并为其提供如下内容:

include *.jpg

当然,我认为您的“映像文件”是实际图片,而不是磁盘映像或 ISO 映像或其他东西;如果我猜错了,您可能需要调整上面的行!但是请查看 distutils 文档的 Specifying which files to distribute 部分,看看您是否无法让这些文件出现在您的 .tar.gz 源代码分发中!祝你好运。

【讨论】:

完美! “include nosenotify/*.png” 是我需要的格式,因为我的文件位于子目录中——这种格式确保 .tar.gz nosenotify/ 目录包含它的 .png 文件。 PS Brandon,讽刺的是,在阅读了你的回答后,我去了你的博客,看到了我提出问题前一天的帖子,说你对 setup.py 感到厌烦,以至于你正在制作 pyron。 :)

以上是关于如何将原始 Python 包上传到 PyPI?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 conda 骨架与未上传到 pypi 的包一起使用?

发布本地的python程序到pypi服务器

如何把python代码上传到服务器上

如何使用 twine 将新版本的项目上传到 PyPI?

无法将包上传到 PyPI:410 Gone

如何将图像添加到 Python 包索引文档中?