我已经安装了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
下运行
吡咯烷酮-v ====================================================================测试会话启动==================================================================== platform linux2 -Python2.7.6,pytest-3.0.3,py-1.4.31,Pluy-0.4.0- /usr/bin/python
为什么pytest
在旧版本下运行?
发布于 2016-11-21 12:34:55
底线:运行
python -m pytest
,或pytest
安装在系统包管理器中,则为py.test-<version>
,或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
从其安装中使用包。pytest
可能包括名为py.test-<version>
(例如py.test-3
或py.test-3.6
)的PATH
上的版本可执行文件,这取决于您安装它的方式。python36-pytest
--这实际上是有保证的。pip
安装了一个版本,它只会创建一个不版本的可执行文件(尽管您可以自己创建一个版本)。此外,如果您为不同的Python版本安装相同的包,但使用相同的--prefix
,它将覆盖现有的一个可执行文件!
pyenv
的建议是似乎是在~/.pyenv/versions
. 下安装所有感兴趣的python
版本和软件包。/usr/local
。pip
!)创建了pip
!当前为该版本安装的脚本,因此在没有路径的情况下调用这些脚本将运行那些shims。/usr/local
,这正是您现在看到的结果。
发布于 2016-11-21 11:50:10
发布于 2020-11-07 13:23:45
我只想为Python2.7运行“黑色”,但我已经在pyenv的Python3.7.9中安装了它。它与脚本/usr/local/bin/black27
一起正确工作。
PYENV_VERSION=3.7.9 black -t py27 "$@"
它不适用于:
pyenv shell 3.7.9
black -t py27 "$@"
nor
pyenv shell 3.7.9
pyenv exec black -t py27 "$@"
https://stackoverflow.com/questions/40718770
复制相似问题