Mas*_*Man 5 python virtualenv python-3.x pyenv
是否可以使用pyenv?为不同的名称设置两个不同的 python 版本?例如,我想要python3参考版本 3.7.4,但python参考由系统定义的 Python 版本 2,即 2.7.12,因此不会有任何冲突和问题。
目前,我只能使用pyenv global 3.7.4这两种方法来全局设置版本,python并且python3都是 3.7.4 版。
我知道这个问题是不久前提出的,但我偶然发现了同样的问题,这是我采取的方法。
最初,我有(我想你也有)python并python3指向系统的Python:
$ pyenv versions
* system (set by /home/nigorojr/.pyenv/version)
3.7.4
$ python --version && pyenv which python
Python 2.7.12
/usr/bin/python
$ python3 --version && pyenv which python3
Python 3.5.2
/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)
然而,这就是我想要的:
$ python --version && pyenv which python
Python 2.7.12
/usr/bin/python
$ python3 --version && pyenv which python3
Python 3.7.4
/home/nigorojr/.pyenv/versions/3.7.4/bin/python3
Run Code Online (Sandbox Code Playgroud)
我采取的方法类似于@Kapitol 的第二个建议。但是,我创建了一个 shell 脚本而不是别名,因为我希望其他命令(包括pyenv)能够找到我的新python3命令。
我创建了~/bin/python3(~/bin在我的$PATH变量中)包含以下内容:
#!/bin/sh
# PYENV_VERSION="$( pyenv versions | tr -d ' ' | awk '/^3\./ { print $1 }' | tail -n 1 )" pyenv exec python3 $@
# Or simply,
PYENV_VERSION="3.7.4" pyenv exec python3 $@
Run Code Online (Sandbox Code Playgroud)
通过这个 shell 脚本,我得到:
$ python --version && pyenv which python
Python 2.7.12
/usr/bin/python
$ python3 --version && pyenv which python3
Python 3.7.4
/home/nigorojr/bin/python3
Run Code Online (Sandbox Code Playgroud)
注1:在shell脚本中使用exec python3 $@instead ofpyenv exec python3 $@不起作用,因为它变成了对脚本本身的无限递归调用(取决于$PATH)。usingpyenv exec确保pyenv无论$PATH变量如何排序,Python 都会被调用。
注 2:让所有获取最新版本的管道由其管理,pyenv确实会在调用时减慢启动速度python3。PYENV_VERSION因此,如果您想使用特定版本,我建议您简单地设置所需的 Python 版本。
注 3:请注意,pip3使用此方法将找不到 和 其他命令。一种解决方案是为您使用的每个命令创建一个 shell 脚本。另一种解决办法是,如果系统中没有安装该命令,则运行3.7.4即可搜索pyenv global system 3.7.4。pyenv
为了确保一切按预期工作,我编写了以下 Python 脚本:
$ pyenv versions
* system (set by /home/nigorojr/.pyenv/version)
3.7.4
$ python --version && pyenv which python
Python 2.7.12
/usr/bin/python
$ python3 --version && pyenv which python3
Python 3.5.2
/usr/bin/python3
Run Code Online (Sandbox Code Playgroud)
并跑:
$ ./sample.py
2.7.12 (default, Oct 8 2019, 14:14:10)
[GCC 5.4.0 20160609]
$ python ./sample.py
2.7.12 (default, Oct 8 2019, 14:14:10)
[GCC 5.4.0 20160609]
$ python3 ./sample.py
3.7.4 (default, Sep 16 2019, 16:09:11)
[GCC 5.4.0 20160609]
Run Code Online (Sandbox Code Playgroud)
将第一行更改为#!/usr/bin/env python3,我得到:
$ ./sample.py
3.7.4 (default, Sep 16 2019, 16:09:11)
[GCC 5.4.0 20160609]
$ python ./sample.py
2.7.12 (default, Oct 8 2019, 14:14:10)
[GCC 5.4.0 20160609]
$ python3 ./sample.py
3.7.4 (default, Sep 16 2019, 16:09:11)
[GCC 5.4.0 20160609]
Run Code Online (Sandbox Code Playgroud)
总而言之,通过上述方法,您可以指向python系统的Python 2,同时python3指向随pyenv.
小智 5
Pyenv 允许您使用“高级”模式一次使用不同版本的 Python
文档中的示例:
$ pyenv local 2.7.6 3.3.3
$ pyenv versions
system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
$ python --version
Python 2.7.6
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
Run Code Online (Sandbox Code Playgroud)
更多信息请查看:https : //github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-local-advanced
| 归档时间: |
|
| 查看次数: |
3144 次 |
| 最近记录: |