2014-03-07 35 views
3

我一直在努力解决这个问题一段时间,我甚至试着问这个问题here,但做得非常糟糕。从那以后,我开始明白发生了什么好转。我相信问题的根源在于,当我运行python setup.py [install|develop]时,它会尝试使用easy_install而不是pip来实现依赖关系(install_requires)。setup.py可以使用pip而不是easy_install吗?

这听起来可能不是问题,但我运行自己的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)。

我的设置对我来说似乎并不奇怪,所以其他人肯定会遇到并解决这个问题。

回答

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 
+0

我没有意识到,你可以直接通过pip直接安装,而无需先升级到服务器。这很棒。结合@detly建议的-e选项,这是完美的。非常感谢你们! – zenzic

2

您可能会感兴趣的画中画的"editable install" option,与-e标志指定:

“编辑”安装是根本“setuptools的发展模式”进行安装。

对于本地项目,“SomeProject.egg-info”目录是相对于项目路径创建的。相对于仅使用setup.py develop来说,这是一个优点,它直接相对于当前工作目录创建“egg-info”。

+0

谢谢!我会给你一个镜头。 – zenzic

0

这并没有真正回答我的问题,我仍然不知道如何使setup.py使用PIP而不是easy_install的。但是,我确实找到了解决我的问题的方法。您可以通过在您的~/.pydistutils文件中指定它来强制easy_install使用您选择的索引服务器。例如:

[easy_install] 
index_url = http://pypi.my_domain.org/simple 
相关问题