PyPI 安装和压缩包中缺少我的包的 requirements.txt 文件

Posted

技术标签:

【中文标题】PyPI 安装和压缩包中缺少我的包的 requirements.txt 文件【英文标题】:requirements.txt file for my package missing from PyPI install and tarball 【发布时间】:2017-09-30 14:10:56 【问题描述】:

我按照http://peterdowns.com/posts/first-time-with-pypi.html 的说明将我的 github 托管 python 包添加到 PyPI。但是,当我尝试 pip 安装它并运行我的 setup.py 时,我发现 requirements.txt 文件丢失了。当我从https://github.com/<username>/<mypackage>/archive/0.1.tar.gz 手动下载压缩包文件时,我发现所有文件都在那里。但是,当我单击我的包的 PyPI 页面上的下载链接时,它会下载一个 .tar.gz 存档,其中仅包含 python 文件、配置文件和它似乎已创建的 PKG-INFO 文件。

其他文件都不见了,这是为什么,我该如何解决?

【问题讨论】:

【参考方案1】:

setuptools 默认情况下会根据您添加的模块自动选择要包含的文件——默认情况下,这通常意味着您的 python 文件和__init__.py 文件。

要指定需要包含在您的源代码分发中的其他文件,您可以添加一个MANIFEST.in 文件以将其他文件移植到您的源代码分发中。

包含 requirements.txt 的示例:

include requirements.txt

这些可以来sufficiently more complicated

要查找 MANIFEST.in 支持的所有内容,您可以阅读其文档here。

【讨论】:

这似乎有效,因为文件包含在我可以从 PyPI 下载的 .tar.gz 存档中,当我 pip install 模块时,它似乎下载了文件(因为它安装正确并且检查所有要求都在那里)。但是,当我尝试运行我的包时,它会在我的特定情况下在安装目录中查找文件 (/Users/<username>/anaconda/envs/testenv/lib/python3.6/site-packages/datahandling/VERSION),但找不到该文件。当我自己进入这个目录时,我的清单中的文件(应该在这个子目录中)不存在。 它们看起来至少最初是正确下载的,以便安装包并找到要求。但是安装后它们不在包含包的目录中。 我的 MANIFEST.in 文件如下所示:include requirements.txt include <packagename>/VERSION include LICENSE VERSION 文件位于 .tar.gz 中,必须下载它才能正确进行安装而不会出现错误,因此在下载包是 pip 安装的。但最终不会复制到安装位置。 如果您希望将其复制到安装位置,您需要查看package_data= -- 也就是说,我认为您的 setup.py 过于复杂 -- 要求通过install_requires 指定应该可以正常工作。至于版本,如果只是在 setup.py 中指定字符串,可以在运行时通过pkg_resources.get_distribution('pkgname').version 访问 我现在可能有点过于复杂了,但我打算很快发布一个包,它需要安装目录中其他编程语言的文件,所以我想先解决它以解决一个更简单的问题。

以上是关于PyPI 安装和压缩包中缺少我的包的 requirements.txt 文件的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 PyPI 发布的包中测试不受支持的 Django 版本吗?

Python 包管理

如何从 PyPi 包中提取依赖项

我可以在不在 pypi 中注册包的情况下制作 pip 可安装包吗?

Pip安装旧版本的包[重复]

pypi依赖中的“额外”是啥?