我已经安装了 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 许可协议
底线:运行
python -m pytest
或py.test-<version>
如果您的替代 Python 和pytest
安装有系统包管理器,或者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
启动自身使用其安装中的包。pytest
for your other Python version may include versioned executables on thePATH
namedpy.test-<version>
(egpy.test-3
orpy.test-3.6
) 取决于您安装它的方式。python36-pytest
- 这几乎是有保证的。pip
的版本,它只会创建一个未版本化的可执行文件(尽管你可以自己创建一个版本化的)。此外,如果您为不同的 Python 版本安装相同的包,但使用相同的--prefix
,它将覆盖现有的可执行文件!pyenv
建议的方法 似乎是 安装所有python
感兴趣的版本 和 它们的软件包~/.pyenv/versions
。/usr/local
可以用于它。pip
!)创建填充程序,因此在没有路径的情况下调用这些脚本将运行这些填充程序。/usr/local
只是你看到的结果现在。