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

Ant*_*ile 5 python distutils pip setuptools

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

from setuptools import setup
setup(name='my_package', setup_requires=['cython'])
Run Code Online (Sandbox Code Playgroud)

假设我已经完成以下操作来构建它到源代码分发:

$ 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
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是使用某些组合--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
Run Code Online (Sandbox Code Playgroud)

在:

/usr/lib/python2.6/distutils/distutils.cfg
~/.pydistutils.cfg
./setup.cfg
Run Code Online (Sandbox Code Playgroud)

我正在使用--net nonedocker 的设置来帮助调试它,如果它让你更容易进行复制.

Eev*_*vee 5

(除了您的问题--find-links作为typoed dists代替dist)是第一件事点子确实安装一个软件包运行python setup.py egg_info,而不打扰沿着任何的包查找信息传递.Pip实际上并不希望 setuptools安装任何依赖项!它希望setuptools吐出依赖关系,egg_info因为pip可以读取它们并自己获取它们.

但在依赖setup_requires总是安装在任何的调用setup.py.我甚至说这setup_requires与pip完全不相容.

替代方案是......只需将构建代码放入build步骤中即可.在完成所有依赖项之前,Pip不会尝试构建您的包.