10

我有一个支持 python 2.4、2.6 和 2.7 的构建框。这导致在他们自己的 python 安装中需要安装各种版本的点子。我tox用来通过setup.py.

每当我运行 a{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,而我用来执行的 python 解释器安装的 pipsetup.py test是 1.5.2。这会在运行测试时导致错误,因为它使用 pip 安装目录,其中一些来自外部源,在 1.5.2 中,我们需要为其中一个模块显式设置 --allow-external --allow-unverified 标志在 1.4.1 中不存在,每次我通过 tox 调用测试时都会导致错误。

只有一个python2.7安装,它是从源代码安装的。但我认为它运行 pip 1.4.1,但现在已升级为使用 1.5.2。tox怎么能用老版本?有没有.pth需要清理的文件或东西?

我可以tox直接删除并运行 pytests,但我更喜欢通过tox.
如果您想查看日志,请告诉我,我可以使用日志更新问题。

4

2 回答 2

1

tox根据您测试的python版本(即基于您 在或选项的参数)创建一个virtualenv in.tox/py27等。 然后安装到这个 virtualenv 和你的包中,以及你的包所依赖的所有包。.tox/py35envlisttox.ini-etoxpip

在进一步运行时,为了节省时间,virtualenv 会被重用,并且只重新安装你的包(并且可能会更新依赖项)。除非您这样做,否则您pip将保留原始版本:

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

或使用以下命令重新初始化完整的 virtualenv:

tox -r -e py27

(或者tox -r对于你的所有python版本的所有.toxvirtualenvs 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缓存。

于 2016-12-04T18:02:12.350 回答
-2

使用这种方法:创建一个与 setup.py 相同级别的 tox.ini 文件,并使用它来告诉 tox 要运行哪些版本,就像这里

于 2015-09-10T17:24:02.833 回答