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

新手上路,请多包涵

我已经安装了 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 外壳 3.5.2

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

 $ python --version
Python 3.5.2

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

pytest -v

================================================ ================== 测试会话开始 ============================= =======================================

平台 linux2——Python 2.7.6、pytest-3.0.3、py-1.4.31、pluggy-0.4.0——/usr/bin/python

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

原文由 B Faley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 902
2 个回答

底线:运行

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

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

pyenv正如它的 README.md 所说,不替换 /usr/bin/python 因为它确实不应该被替换以避免破坏系统包

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

  • 运行 python -m pytest 将使任何 python 启动自身使用其安装中的包。
  • Alternatively, pytest for your other Python version may include versioned executables on the PATH named py.test-<version> (eg py.test-3 or py.test-3.6 ) 取决于您安装它的方式。
    • 如果它来自系统包管理器的非标准 python 包 - 比如 python36-pytest - 这几乎是有保证的。
    • 我检查过如果你安装一个带有 pip 的版本,它只会创建一个未版本化的可执行文件(尽管你可以自己创建一个版本化的)。此外,如果您为不同的 Python 版本安装相同的包,但使用相同的 --prefix ,它将覆盖现有的可执行文件!
  • pyenv 建议的方法 似乎是 安装所有 python 感兴趣的版本 它们的软件包 ~/.pyenv/versions
    • 这不适用于系统的 Python,但默认的 /usr/local 可以用于它。
    • 一旦您切换到另一个 Python 版本,它声称会为当前 为该版本 安装的 所有 脚本(包括 --- pip !)创建填充程序,因此在没有路径的情况下调用这些脚本将运行这些填充程序。
      • 因此,如果没有为替代版本安装软件包(及其脚本),而是为系统版本安装,则尝试运行其可执行文件将“失败”到 /usr/local 只是你看到的结果现在。

原文由 ivan_pozdeev 发布,翻译遵循 CC BY-SA 3.0 许可协议

我发现 了这个相关问题。对于他们来说,它适用于:

 python -m pytest tests/my_test.py

我希望它有效

原文由 linpingta 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题