python – 从本地源代码发行版安装包含setup_requires的包

使用包含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

但是我得到一个看起来像这样的错误:

没有找到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设置来帮助调试它,如果它让你更容易进行复制.

解决方法:

问题(除了你的–find-links被拼写为dists而不是dist)是pip安装包的第一件事就是运行python setup.py egg_info,而无需传递任何包查找信息. Pip实际上并不希望setuptools安装任何依赖项!它希望setuptools将依赖关系吐出为egg_info,因此pip可以读取它们并自己获取它们.

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

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

上一篇:python – 具有entry_points的Setuptools


下一篇:pyqt设计