我一直试图解决这个问题一段时间,我甚至尝试过问here,但这样做的确很糟糕。从那以后,我逐渐明白发生了什么。我相信问题的根源是当我运行python setup.py [install|develop]
时,它尝试使用easy_install而不是pip来实现依赖项(install_requires)。
这听起来可能不是问题,但我运行自己的pypi服务器,存储这些依赖项。我可以指定pip使用我的索引服务器和PIP_INDEX_URL环境变量。使用pip install
进行部署时,此工作正常,但在开发时,我希望使用setup.py develop
进行安装的便利性。据我所知,setup.py调用easy_install并且它不关注这个环境变量,试图在pypi.python.org上找到我的包。我知道从命令行,我可以为easy_install指定索引服务器,但是当从setup.py隐式调用它时,看不到这样做。
我对pip没有遇到这个问题感到困惑。当我pip install
这些模块中的一个时,它为我的包运行setup.py,但是从我的索引服务器中获取依赖项。为什么setup.py在pip下运行时的行为与我直接调用它时的行为不同?
在setup.py中指定dependency_links并不是一个好的答案,因为我希望我的环境确定要使用哪个pypi服务器(例如prod,test或dev)。
我的设置对我来说似乎并不奇怪,所以其他人遇到并解决了这个问题。
答案 0 :(得分:2)
您可能对使用-e
标志指定的pip "editable install" option感兴趣:
“可编辑”安装基本上是“setuptools develop mode”安装。
对于本地项目,相对于项目路径创建“SomeProject.egg-info”目录。这比仅使用setup.py develop更有优势,它直接相对于当前工作目录创建“egg-info”。
答案 1 :(得分:2)
为什么在pip下运行时setup.py的行为与我直接调用它时的行为不同?
pip
是setuptools
的包装,PIP_INDEX_URL
变量是pip
功能。您的setup.py
文件使用的setuptools
不知道PIP_INDEX_URL
。
我建议使用:
PIP_INDEX_URL=http://yourpypi/ pip install .
而不是
python setup.py install
答案 2 :(得分:0)
这并没有真正回答我的问题,因为我仍然不知道如何使用pip而不是easy_install来使用setup.py。但是,我确实找到了解决问题的方法。您可以通过在~/.pydistutils
文件中指定它来强制easy_install使用您选择的索引服务器。类似的东西:
[easy_install]
index_url = http://pypi.my_domain.org/simple