首页 > 解决方案 > pip 没有安装我的包依赖项

问题描述

我在 github 上开发了一个 python 包,并在 PyPi 上发布。它与 一起安装pip install PACKAGENAME,但不会对 setup.py 文件的“install_requires”中所述的依赖项做任何事情。

奇怪的是,相关版本的 zip 文件确实安装了所有依赖项。我尝试使用不同的虚拟环境和不同的计算机,但它从不安装依赖项。任何帮助表示赞赏。

标签: pythonpip

解决方案


pip install pythutils如果它可用,则下载一个轮子——并且它可用于您的包。

生成轮子时在本地setuptools运行但不包含在轮子中。下载您的Wheel 文件并解压缩它(它只是一个 zip 存档) - 有您的主包目录和一个包含 metadata 的目录。在元数据目录中,有一个文件通常列出静态依赖项,但您的文件没有列出任何依赖项。因为当你生成轮子时,你的所有依赖项都已经安装好了,所以你所有的动态代码路径都被跳过了。python setup.py setup.pypythutilspythutils-1.1.1.dist-infoMETADATA

您从 Github 下载的存档安装依赖项,因为它不是轮子,因此pip可以运行python setup.py install并且您的动态依赖项可以正常工作。

你可以做什么?我的建议是避免动态依赖。声明静态依赖并允许pip决定安装哪些版本:

install_requires=[
    'numpy==1.16.5; python_version>="2" and python_version<"3"',
    'numpy; python_version>="3"',
],

另一种方法是创建特定版本的轮文件——一个用于 Python 2,另一个用于 Python 3——具有固定的依赖关系。

另一种方法是根本不发布轮子,而只发布 sdist(源代码分发)。然后pip被强制python setup.py install在目标机器上运行。这不是最好的方法,而且对于带有 C 扩展的包肯定会有问题(用户必须有编译器和开发工具才能从源代码安装)。


推荐阅读