使用另一个版本的python运行pytest
我已经安装了使用另一个版本的python运行pytest,python,linux,pytest,pyenv,Python,Linux,Pytest,Pyenv,我已经安装了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时,它仍然在python2.7.6下运行: pytest-v ====================
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
时,它仍然在python2.7.6
下运行:
pytest-v===========================================================================================测试会话开始==============================================================================================================================================================================================================
平台linux2--Python2.7.6、pytest-3.0.3、py-1.4.31、pluggy-0.4.0--/usr/bin/Python
为什么
pytest
在旧版本下运行?我在互联网上搜索并找到。那家伙的工作方式如下:
python -m pytest tests/my_test.py
请告诉我这是否有效:)底线:运行
,或python-m pytest
如果您的替代Python和py.test-
安装了system package manager,或者pytest
- 如果您的替代Python已安装了
,请使用pyenv
切换到该版本,并确保已为其安装了pyenv
。然后您可以运行pytest
。pytest
- 由于
可执行文件也在被切换的可执行文件中,因此在为其安装pip
之前,您也需要切换到替代Pythonpytest
- 由于
正如我所看到的,
/usr/bin/pytest
(属于系统包管理器的python-pytest
包)有一个shebang#/usr/bin/python
,因为它对应于系统python的安装
pyenv
,不替换/usr/bin/python
-
相反,它将其目录添加到PATH
,并在那里插入一个启动器(称为“”),当您键入“python
”时,将调用该启动器。正如你可能猜到的那样,这种黑客行为被上面提到的一个shebang忽略了——这是应该的
- 运行
将使启动自身的python-m pytest
使用其安装的包python
- 或者,其他Python版本的
可能在名为pytest
(例如py.test-
或py.test-3
)的py.test-3.6
路径上包含版本化的可执行文件,具体取决于安装方式。
- 如果它来自非标准python的系统包管理器包(如
),这几乎是可以保证的python36-pytest
- 我检查过,如果您安装的版本带有
,它只会创建一个未版本化的可执行文件(尽管您可以自己创建一个版本化的可执行文件)。此外,如果为不同的Python版本安装相同的软件包,但使用相同的pip
--前缀
,它将覆盖现有的可执行文件李>
- 如果它来自非标准python的系统包管理器包(如
的建议方法是在pyenv
下安装所有感兴趣的~/.pyenv/versions
版本及其软件包。python
- 这不适用于系统的Python,但可以使用默认的
/usr/local
- 一旦您切换到另一个Python版本,它会声明为当前为该版本安装的所有脚本(包括
!)创建脚本,因此在没有路径的情况下调用这些脚本将运行这些脚本。pip
- 因此,如果一个包(以及它的脚本)不是为替代版本安装的,而是为系统版本安装的,那么尝试运行它的可执行文件将“失败”到
,结果就是您现在看到的结果/usr/local
- 因此,如果一个包(以及它的脚本)不是为替代版本安装的,而是为系统版本安装的,那么尝试运行它的可执行文件将“失败”到
- 这不适用于系统的Python,但可以使用默认的
/usr/local/bin/black27时工作正常:
PYENV_VERSION=3.7.9 black -t py27 "$@"
它不适用于:
pyenv shell 3.7.9
black -t py27 "$@"
也不是
哪个python
和哪个pytest
显示了什么?是指向文件链接还是某些启动程序脚本?您还可以尝试hash-r
来消除过时的bash
路径缓存。@ivan_pozdeev哪个python
=>/home/meysam/.pyenv/shimmes/python
-哪个pytest
/usr/local/bin/pytest
我通过运行上述命令获得此错误:/home/meysam/.pyenv/versions/3.5.2/bin/python:没有名为pytest的模块
您成功安装了pytest吗?是的,我运行pytest时所有的测试都通过了。但是它只在python2.7.6下运行。我不知道为什么,但是当我运行python-m pytest
时,我得到了这个错误:/home/meysam/.pyenv/versions/3.5.2/bin/python:没有名为pytest的模块
@meysam,这意味着你没有为两个版本的python安装pytest
(你知道,需要单独安装)。谢谢。我单独安装了它,现在它可以工作了:)
pyenv shell 3.7.9
pyenv exec black -t py27 "$@"