为什么`tox`在Windows中的系统Python目录中安装包?

时间:2018-06-01 02:51:39

标签: python windows cygwin tox

我是tox的新手,但我的理解是它为每个测试环境创建了本地虚拟环境。但是,似乎每当我运行tox时,它首先将软件包安装到系统Python安装中,然后在那里安装任何依赖项。

以下是我可以展示的最简单的例子:

我的tox.ini只是:

[tox]
envlist = py27

[testenv]
commands = pytest

deps =
    pytest

然后,未安装以下一系列命令pytest,但在tox运行结束时,它安装在系统python路径中:

> which pytest
which: no pytest in (/cygdrive/c/Program Files (x86....

> tox
[... lots of output ...]

___________________________________ summary ___________________________________
  py27: commands succeeded
  congratulations :)

然后,

> which pytest
/cygdrive/c/Python27/Scripts/pytest

此外,我看到我测试的软件包也安装在系统python目录中。

不应该tox在本地生成虚拟环境吗?我看到有一个.tox/py27目录被创建,但它看起来像一个Linux风格的安装,带有bin目录而不是Scripts。这是tox的预期行为吗?

1 个答案:

答案 0 :(得分:1)

似乎您在系统的PATH环境变量上使用了Windows原生Python,甚至在Cygwin的/bin路径之前就已经插入了它,因此tox正在寻找并尝试运行该Python而不是Cygwin的Python。通常,除非有特殊原因,否则不应使用Cygwin的Windows Python。

在评论中,您提到已安装TortoiseHG。我不完全知道TortoiseHG在Windows上如何工作,但是由于Mercurial是用Python编写的,因此TortoiseHG必须要么带有Python解释器,要么至少使用它在Windows上找到的任何Python解释器(可能使用virtualenv),所以如果TortoiseHG有一个PATH条目,请确保它仍在您的Cygwin {/,/usr/,/usr/local/}bin之后。