2014-02-12 160 views
10

我有一個支持python 2.4,2.6和2.7的編譯框。這會導致按照自己的python安裝要求安裝各種版本的點。我使用tox通過setup.py運行測試。當安裝了多個版本的python時,tox使用錯誤版本的pip

每當我運行{python2.7_installation_dir}/bin/python setup.py test時,都會產生一個.tox目錄。裏面.tox目錄我跑

py27/bin/pip --version 
pip 1.4.1 from {my_package}/.tox/py27/lib/python2.7/site-packages (python 2.7) 


[[email protected] .tox]# python2.7 
Python 2.7.6 (default, Nov 20 2013, 15:33:09) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pip 
>>> pip.__version__ 
'1.5.2' 

所以.tox目錄中PIP的版本是1.4.1,其中的安裝,我使用執行setup.py test是1.5.2 Python解釋器點子。這在運行測試時會導致錯誤,因爲它使用pip來安裝目錄,並且其中一些來自外部源,並且在1.5.2中我們需要明確地設置--allow-external --allow-uniserified標誌,用於其中一個模塊在1.4.1中不存在,每當我通過tox調用測試時都會導致錯誤。

只有一個python2.7安裝,它是從源代碼安裝的。但我認爲它運行點1.4.1,但現在升級到1.5.2。如何毒素可以使用舊版本?是否有任何.pth文件或可能遺留下來的需要清理的文件?

我可以放下tox並直接運行pytests,但我更願意通過tox運行它們。
請讓我知道如果你想看到日誌,我可以用日誌更新問題。

+0

您是否找到解決方案?我也有同樣的問題。 – Vetalll

+0

不,我因爲缺乏時間研究而放棄了怯懦! – opensourcegeek

回答

-1

使用此方法:創建在同一水平作爲你的setup.py一個tox.ini文件,並用它來告訴TOX版本運行的,就像here

+1

這不回答問題。這不是所尋求的Python版本,而是pip版本。 – Sardathrion

1

tox創造了一個.tox/py27 virtualenv中,.tox/py35等視在你測試的python版本上(即根據你的envlisttox.ini或參數-e選項)。 tox然後將pip安裝到此virtualenv以及您的軟件包以及您的軟件包所依賴的所有軟件包中。

在進一步運行中,爲了節省時間,virtualenv將被重用,並且只有您的軟件包被重新安裝(並且可能的依賴關係已更新)。你pip會留在原來的版本,除非你做:

./tox/py27/bin/pip install -U pip 

或重新初始化完整的virtualenv:

tox -r -e py27 

(或tox -r所有.tox virtualenvs所有Python版本在envlist)。

如果您還想要分析tox請問怎麼設置,第一個電話:

tox -r -e py27 -vv 

從輸出可以看到重新步:

py27 recreate: /src/site-packages/your/package/.tox/py27 
    removing /src/site-packages/your/package/.tox/py27 
setting PATH=/src/site-packages/your/package/.tox/py27/bin:/opt/python/2.7/bin:........ 
    /src/site-packages/your/package/.tox$ python -m virtualenv --python /opt/python/2.7.13rc1/bin/python py27 >/src/site-packages/your/package/.tox/py27/log/py27-0.log 

現在你去。TOX目錄和重做的virtualenv創建詳細:

cd .tox; rm -rf py27 
python -m virtualenv --python /opt/python/2.7/13rc1/bin/python py27 

從這個日誌,你會看到它使用的pip最新(緩存)版本。正如你的正常安裝得到你最新的pip版本,應該沒有必要清理/更新pip的緩存。