【发布时间】:2018-06-01 02:51:38
【问题描述】:
我是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 目录,但它看起来像是一个带有bin 目录而不是Scripts 的Linux 风格安装。这是tox 的预期行为吗?
【问题讨论】:
-
嗨 Rich,这很有趣。这可能是 tox 和 cygwin 之间的意外交互。 tox 没有正式支持(甚至不知道)Windows + Cygwin,它实际上应该为您的 Windows 安装使用正确的路径(
C:\Python27而不是/cygdrive/c/Python27)。第二个惊喜是 tox 确实没有创建 virtualenv 而是使用原始解释器。我不知道这怎么可能——尤其是像你发布的那样简单的tox.ini。所以我真的很难过。 -
能否请你打开一个关于 tox 项目的问题 (github.com/tox-dev/tox) 并在那里详细描述问题?特别是如果您对路径和 Cygwin 进行了任何额外的设置?谢谢。在问题中查看与 cygwin 的 tox 交互,目前还没有任何相关内容:github.com/tox-dev/tox/issues?utf8=%E2%9C%93&q=cygwin+ - 所以这需要一些调查。
-
呃,我认为这与 Tox 无关。首先,您不应该从 Cygwin 调用 Windows Python,而应该将其从您的
PATH中删除,或者至少确保您的 Cygwin/bin路径首先位于PATH上。否则不要使用 Cygwin。 -
嗨@oliver-bestwalter,我意识到将
which语句的输出放在那里很令人困惑。我实际上并没有在 Cygwin shell 中运行它,但是 Cygwin 实用程序确实在我的路径中。我从我的路径中删除了 Cygwin,并且可以验证这似乎是导致tox认为它在 Linxu 环境中的原因,但我不明白为什么会这样,除非tox正在尝试一些系统命令,不是吗?我也会在git上发布报告。 -
嗨,谢谢@Iguananaut,作为参考,我没有在 Cygwin shell 中运行 Python,但 Cygwin 实用程序在我的路径中。但是我确实将 Cygwin 撞到了我的路径的前面,这解决了我的问题。我不知道为什么,因为 Cygwin 之前仅有的两个元素是 TortoiseHG 和 TortoiseSVN。我很想知道为什么会这样。如果您想将此作为“rep”的答案发布,我很乐意将其标记为。