从本地源代码分发安装具有setup_requires的包

时间:2014-12-05 00:59:50

标签: python pip setuptools distutils

使用包含setup_requires的以下简单包:

from setuptools import setup
setup(name='my_package', setup_requires=['cython'])

假设我已完成以下操作以将其构建为源代码分发:

$ python setup.py sdist

并下载了Cython的源代码发布

$ pip install --download ./dist/ --no-use-wheel Cython

所以现在我有:

$ ls dist/
my_package-0.0.0.tar.gz
Cython-0.21.1.tar.gz

我希望能够使用--find-links等的某种组合将程序包安装在网络隔离的计算机上。

我想我可以做点什么

pip install --no-index --find-links="file:///$(pwd)/dists" dist/my_package-0.0.0.tar.gz

但是我收到的错误如下:

No local packages or download links found for cython(全文:http://paste.pound-python.org/show/IxmzEEfQ5yZRU45i2FBM/

我尝试过的尝试失败了:

设置以下

[easy_install]
allow_hosts = ''
find_links = file:///$(pwd)/emr-sdists

在:

/usr/lib/python2.6/distutils/distutils.cfg
~/.pydistutils.cfg
./setup.cfg

我目前正在使用docker的--net none设置来帮助调试它,如果它让您更容易进行复制。

1 个答案:

答案 0 :(得分:5)

问题(除了您的--find-links被标记为dists而不是dist)之外,pip安装包的第一件事是运行python setup.py egg_info,没有困扰传递任何包裹查找信息。 Pip实际上想要 setuptools来安装任何依赖项!它希望setuptools将依赖关系吐出为egg_info,因此pip可以读取它们并自己获取它们。

但是setup_requires中的依赖项总是安装在 setup.py的任何调用上。我甚至可以说setup_requires与pip完全不兼容。

另一种方法是......将您的构建代码放在build步骤中。在完成所有依赖项之前,Pip不会尝试构建你的包。