[英]tox uses wrong version of pip when multiple versions of python are installed
我有一個支持python 2.4,2.6和2.7的構建盒。 這導致在他們自己的python安裝中根據需要安裝各種版本的pips。 我正在使用tox
通過setup.py
運行測試。
每當我運行{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)
[buildbot@BUILD-SERV-01 .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
python解釋器安裝的pip是1.5.2。 這在運行測試時會導致錯誤,因為它使用pip來安裝目錄,其中一些來自外部源,而在1.5.2中我們需要為其中一個模塊明確設置--allow-external --allow-unverified標志。在1.4.1中不存在,每次通過tox調用測試時都會導致錯誤。
只有一個python2.7安裝,它是從源安裝的。 但我認為它正在運行pip 1.4.1,但現在已升級為使用1.5.2。 如何使用舊版本? 是否有任何.pth
文件或可能留下的東西需要清理?
我可以放棄tox
並直接運行pytests但我更喜歡通過tox
運行它們。
如果您想查看日志,請告訴我,我可以使用日志更新問題。
tox
在創建virtualenv中.tox/py27
, .tox/py35
等取決於你與測試Python版本(即基於你envlist
在tox.ini
或參數的-e
選項)。 然后tox
將pip
安裝到這個virtualenv,你的包以及你的包依賴的所有包中。
在進一步的運行中,為了節省時間,virtualenv被重用,只重新安裝了包(並且可能的依賴項已更新)。 除非您這樣做,否則您的pip
將保留原始版本:
./tox/py27/bin/pip install -U pip
或重新初始化完整的virtualenv:
tox -r -e py27
(或者你的envlist
所有python版本的所有.tox
virtualenvs的tox -r
)。
如果您還想分析如何設置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
的緩存。
使用這種方法:創建一個與setup.py相同級別的tox.ini文件,並使用它來告訴tox要運行哪些版本,比如這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.