我安装了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
================================================== ==================测试会话开始============================= =======================================
平台linux2 - Python 2.7.6,pytest-3.0.3,py-1.4.31,pluggy-0.4.0 - / usr / bin / python
为什么pytest
在旧版本下运行?
答案 0 :(得分:6)
底线:运行
python -m pytest
或py.test-<version>
如果您的替代Python和pytest
与系统软件包管理器一起安装,或pyenv
一起安装,请使用pyenv
切换到该版本和,确保为其安装了pytest
。然后你可以运行pytest
。
pip
可执行文件也是正在切换的可执行文件,因此您需要在安装 pytest
之前切换到备用Python 。正如我所看到的,/usr/bin/pytest
(属于系统包管理器&#39; s python-pytest
包)有一个shebang !#/usr/bin/python
,因为它对应于系统python&#39;安装。
pyenv
,as its README.md
says,不会取代/usr/bin/python
- because it indeed should not be replaced to avoid breaking system packages。
相反,它将其目录添加到PATH
并在那里插入一个启动器(称为&#34; shim&#34;),这是在您输入&#34; {{时调用的内容1}}&#34 ;.正如你可能猜到的那样,这个hack被像上面的shebang所忽略 - 应该如此。
python
将使自身启动的python -m pytest
使用其安装中的软件包。python
可能包含名为pytest
的{{1}}上的版本化可执行文件(例如PATH
或py.test-<version>
),具体取决于方式你安装了它。
py.test-3
- 这几乎可以保证。py.test-3.6
,它只会创建一个无版本的可执行文件(尽管您可以自己创建一个版本化的版本)。此外,如果您为不同的Python版本安装相同的软件包但使用相同的python36-pytest
,它将覆盖现有的可执行文件!pip
的建议方式seems to be在--prefix
下为他们安装所有pyenv
感兴趣的和包。
python
。~/.pyenv/versions
!)创建了shims,这些脚本当前已为该版本安装 ,因此在没有路径的情况下调用这些脚本会运行这些填充程序。
/usr/local
。答案 1 :(得分:1)
答案 2 :(得分:0)
我只是想为Python 2.7运行“黑色”,但是我已经在pyenv的Python 3.7.9中安装了它。它可以与脚本/usr/local/bin/black27
正常工作:
PYENV_VERSION=3.7.9 black -t py27 "$@"
它不适用于:
pyenv shell 3.7.9
black -t py27 "$@"
也
pyenv shell 3.7.9
pyenv exec black -t py27 "$@"