2014-03-07 33 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 
相關問題