gpt4 book ai didi

python - pytest 与另一个版本的 python 一起运行

转载 作者:IT王子 更新时间:2023-10-29 00:26:07 26 4
gpt4 key购买 nike

我已经安装了 pyenv 并且安装了不同版本的 python:

$ pyenv versions
system
2.7.1
3.2.5
3.5.0
3.5.1
* 3.5.2

我使用以下命令切换到 python 3.5.2:

pyenv shell 3.5.2

当我检查 python 版本时,这是我得到的:

$ python --version
Python 3.5.2

但是当我运行pytest时,它仍然在python 2.7.6下运行:

pytest -v
==================================================================== test session starts ====================================================================
platform linux2 -- Python 2.7.6, pytest-3.0.3, py-1.4.31, pluggy-0.4.0 -- /usr/bin/python

为什么 pytest 在旧版本下运行?

最佳答案

底线:运行

  • python -m pytest , 或
  • py.test-<version>如果您的替代 Python 和 pytest与系统包管理器一起安装,或者
  • 如果您的替代 Python 已安装 pyenv , 用 pyenv 切换那个版本确保你有pytest为它安装。然后你可以运行 pytest .
    • pip可执行文件也在被切换的那些之中,您需要切换到替代 Python 在安装之前 pytest也是为了它。

如我所见,/usr/bin/pytest (属于系统包管理器的 python-pytest 包)有一个 shebang !#/usr/bin/python因为对应系统python的安装。

pyenv , as its README.md says , 不替换 /usr/bin/python - because it indeed should not be replaced to avoid breaking system packages .

相反,它将其目录添加到 PATH并在那里插入一个启动器(称为“shim”),当您键入“python”时会调用它。正如您可能猜到的那样,像上面这样的 shebang 忽略了这个 hack——这是应该的。

  • 正在运行 python -m pytest将制作python启动自身使用其安装中的包。
  • 或者,pytest对于您的其他 Python 版本,可能会在 PATH 上包含版本控制的可执行文件名为 py.test-<version> (例如 py.test-3py.test-3.6 )取决于您安装它的方式。
    • 如果它来自系统包管理器的非标准 python 包 - 如 python36-pytest - 这几乎是有保证的。
    • 我检查过如果你安装一个带有pip的版本,它只会创建一个未版本化的可执行文件(尽管您可以自己创建一个版本化的可执行文件)。此外,如果您为不同的 Python 版本安装相同的包,但使用相同的 --prefix , 它将覆盖现有的可执行文件!
  • pyenv的建议方式seems to be安装所有 python ~/.pyenv/versions 下的感兴趣的版本 包.
    • 这不适用于系统的 Python 但默认 /usr/local可以用于它。
    • 一旦你切换到另一个 Python 版本,它声称创建 shims对于当前为该版本安装的所有脚本(包括pip!),因此在没有路径的情况下调用这些脚本将运行这些垫片。
      • 因此,如果一个包(及其脚本)不是为替代版本安装而是为系统版本安装,则尝试运行其可执行文件将“失败”到/usr/local。就是您现在看到的结果。

关于python - pytest 与另一个版本的 python 一起运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40718770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com