【问题标题】:why is `tox` installing packages in system Python directory in Windows?为什么`tox`在Windows的系统Python目录中安装包?
【发布时间】: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”的答案发布,我很乐意将其标记为。

标签: python windows cygwin tox


【解决方案1】:

看起来您在系统的 PATH 环境变量上使用了一个 Windows 原生 Python,甚至在 Cygwin 的 /bin 路径之前以某种方式插入,所以 tox 正在寻找并尝试运行该 Python 而不是Cygwin的Python。一般来说,除非有非常特殊的原因,否则不应使用 Cygwin 的 Windows Python。

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

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多