python - pip 没有安装我的包依赖项
问题描述
我在 github 上开发了一个 python 包,并在 PyPi 上发布。它与 一起安装pip install PACKAGENAME
,但不会对 setup.py 文件的“install_requires”中所述的依赖项做任何事情。
奇怪的是,相关版本的 zip 文件确实安装了所有依赖项。我尝试使用不同的虚拟环境和不同的计算机,但它从不安装依赖项。任何帮助表示赞赏。
解决方案
pip install pythutils
如果它可用,则下载一个轮子——并且它可用于您的包。
生成轮子时在本地setuptools
运行但不包含在轮子中。下载您的Wheel 文件并解压缩它(它只是一个 zip 存档) - 有您的主包目录和一个包含 metadata 的目录。在元数据目录中,有一个文件通常列出静态依赖项,但您的文件没有列出任何依赖项。因为当你生成轮子时,你的所有依赖项都已经安装好了,所以你所有的动态代码路径都被跳过了。python setup.py
setup.py
pythutils
pythutils-1.1.1.dist-info
METADATA
您从 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 扩展的包肯定会有问题(用户必须有编译器和开发工具才能从源代码安装)。