首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用另一个版本的python运行pytest

用另一个版本的python运行pytest
EN

Stack Overflow用户
提问于 2016-11-21 11:13:03
回答 3查看 30.9K关注 0票数 32

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

代码语言:javascript
运行
复制
$ 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版本时,我得到的是:

代码语言:javascript
运行
复制
$ python --version
Python 3.5.2

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

吡咯烷酮-v ====================================================================测试会话启动==================================================================== platform linux2 -Python2.7.6,pytest-3.0.3,py-1.4.31,Pluy-0.4.0- /usr/bin/python

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-21 12:34:55

底线:运行

  • python -m pytest,或
  • 如果您的替代Python和pytest安装在系统包管理器中,则为py.test-<version>,或
  • 如果您的替代Python已经与pyenv一起安装,请使用pyenv切换到该版本,并确保已经安装了pytest。然后您就可以运行pytest了。
    • 由于pip可执行文件也是正在切换的可执行文件之一,所以在为它安装pytest之前,您也需要切换到替代的Python。

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

pyenv他说,并没有取代/usr/bin/python - 因为它确实不应该被替换,以避免破坏系统包。.

相反,它将其目录添加到PATH中,并在其中插入一个启动程序(称为"希姆"),这是在键入"python“时调用的内容。就像你可能猜到的那样,这个黑客被像上面这样的一群人忽略了--就像它应该做的那样。

  • 运行python -m pytest将使启动自己的任何python从其安装中使用包。
  • 或者,其他Python版本的pytest可能包括名为py.test-<version> (例如py.test-3py.test-3.6)的PATH上的版本可执行文件,这取决于您安装它的方式。
    • 如果它来自系统包管理器的非标准python包--比如python36-pytest --这实际上是有保证的。
    • 我检查过,如果您用pip安装了一个版本,它只会创建一个不版本的可执行文件(尽管您可以自己创建一个版本)。此外,如果您为不同的Python版本安装相同的包,但使用相同的--prefix,它将覆盖现有的一个可执行文件!

  • pyenv的建议是似乎是~/.pyenv/versions. 下安装所有感兴趣的python版本和软件包。
    • 这不适用于系统的Python,但可以使用默认的/usr/local
    • 一旦切换到另一个Python版本,它就声称为所有脚本(包括pip!)创建了pip!当前为该版本安装的脚本,因此在没有路径的情况下调用这些脚本将运行那些shims。
      • 因此,如果一个包(以及它的脚本)不是为替代版本安装的,而是为系统版本安装的,那么尝试运行它的可执行文件将“失败”到/usr/local,这正是您现在看到的结果。

票数 34
EN

Stack Overflow用户

发布于 2016-11-21 11:50:10

我找到了这个相关的问题。对他们来说,它是这样做的:

代码语言:javascript
运行
复制
python -m pytest tests/my_test.py

我希望它能用

票数 6
EN

Stack Overflow用户

发布于 2020-11-07 13:23:45

我只想为Python2.7运行“黑色”,但我已经在pyenv的Python3.7.9中安装了它。它与脚本/usr/local/bin/black27一起正确工作。

代码语言:javascript
运行
复制
PYENV_VERSION=3.7.9 black -t py27 "$@"

它不适用于:

代码语言:javascript
运行
复制
pyenv shell 3.7.9
black -t py27 "$@"

nor

代码语言:javascript
运行
复制
pyenv shell 3.7.9
pyenv exec black -t py27 "$@"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40718770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档