使用不同名称的 pyenv 设置两个不同的 python 版本?
Set two different python versions with pyenv with different names?
是否可以使用 pyenv
为不同的名称设置两个不同的 python 版本?例如。我希望 python3
引用版本 3.7.4,但 python
引用系统定义的 python 的版本 2,即 2.7.12,因此不会有任何冲突和问题。
目前我只能使用 pyenv global 3.7.4
全局设置版本,这导致 python
和 python3
都是版本 3.7.4。
当您 运行 您的 python 时,最好明确说明。 IE。通过 PYENV_VERSION 环境版本指定你想要的版本。如果你通过 pyenv 安装了 python 2.7.12,你应该能够验证:
PYENV_VERSION=2.7.12 python -V
如果您决定 运行 具有相同 python 版本的多个项目,您确实应该创建一个新的 virtualenv 以确保您不会 运行 陷入任何依赖性问题。 Pyenv 有一个 plugin 支持这个。然后你可以这样做:
pyenv virtualenv 2.7.12 python2-env
pyenv virtualenv 3.7.4 python3-env
然后您可以通过以下方式激活您的 shell:
pyenv shell python3-env
在这种情况下 python
将指向 3.7.4 填充程序。
或者:
pyenv shell python2-env
在这种情况下 python
将指向 2.7.12 填充程序。 (你可以随意调用这些 virtualenvs,我只是以 python2-env 和 python3-env 为例。)
如果你真的打算使用 python3 和 python,你总是可以在你的 .bashrc 中设置一个别名:
alias python3='PYENV_VERSION=3.7.4 python'
alias python='PYENV_VERSION=2.7.12 python'
我知道这个问题很久以前就有了,但我偶然发现了同样的问题,下面是我采用的方法。
为了确保我们在同一页面上...
最初,我(我假设你也是)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
然而,这就是我想要的:
$ 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
方法
我采用的方法与@Kapitol 的第二个建议类似。但是,我创建了一个 shell 脚本而不是别名,因为我希望其他命令(包括 pyenv
)能够找到我的新 python3
命令。
我创建了 ~/bin/python3
(我的 $PATH
变量中有 ~/bin
),内容如下:
#!/bin/sh
# PYENV_VERSION="$( pyenv versions | tr -d ' ' | awk '/^3\./ { print }' | tail -n 1 )" pyenv exec python3 $@
# Or simply,
PYENV_VERSION="3.7.4" pyenv exec python3 $@
使用这个 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
注1:在shell脚本中使用exec python3 $@
代替pyenv exec python3 $@
不起作用,因为它变成了对脚本本身的无限递归调用(取决于$PATH
).使用 pyenv exec
可确保无论 $PATH
变量如何排序,pyenv
Python 都会被调用。
注意 2:让所有获取最新版本的管道都由 pyenv
管理确实会在调用 python3
时减慢启动速度。因此,如果您有想要使用的特定版本,我建议您在 PYENV_VERSION
中简单地设置您想要的 Python 版本。
注意 3:请注意,pip3
和其他命令将无法通过此方法找到。一种解决方案是为您使用的每个命令创建一个 shell 脚本。另一种解决方法是运行pyenv global system 3.7.4
这样如果系统没有安装命令pyenv
可以在3.7.4中搜索
检查它是否有效
为了确保一切都按预期工作,我编写了以下 Python 脚本:
#!/usr/bin/env python
import sys
print(sys.version)
和运行:
$ ./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]
将第一行改为#!/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]
总而言之,通过上述方法,您可以让 python
指向系统的 Python 2,同时让 python3
指向安装了 pyenv
的版本。
Pyenv 允许您使用 "advanced" 模式
同时使用不同版本的 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
更多信息请查看:
https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-local-advanced
是否可以使用 pyenv
为不同的名称设置两个不同的 python 版本?例如。我希望 python3
引用版本 3.7.4,但 python
引用系统定义的 python 的版本 2,即 2.7.12,因此不会有任何冲突和问题。
目前我只能使用 pyenv global 3.7.4
全局设置版本,这导致 python
和 python3
都是版本 3.7.4。
当您 运行 您的 python 时,最好明确说明。 IE。通过 PYENV_VERSION 环境版本指定你想要的版本。如果你通过 pyenv 安装了 python 2.7.12,你应该能够验证:
PYENV_VERSION=2.7.12 python -V
如果您决定 运行 具有相同 python 版本的多个项目,您确实应该创建一个新的 virtualenv 以确保您不会 运行 陷入任何依赖性问题。 Pyenv 有一个 plugin 支持这个。然后你可以这样做:
pyenv virtualenv 2.7.12 python2-env
pyenv virtualenv 3.7.4 python3-env
然后您可以通过以下方式激活您的 shell:
pyenv shell python3-env
在这种情况下 python
将指向 3.7.4 填充程序。
或者:
pyenv shell python2-env
在这种情况下 python
将指向 2.7.12 填充程序。 (你可以随意调用这些 virtualenvs,我只是以 python2-env 和 python3-env 为例。)
如果你真的打算使用 python3 和 python,你总是可以在你的 .bashrc 中设置一个别名:
alias python3='PYENV_VERSION=3.7.4 python'
alias python='PYENV_VERSION=2.7.12 python'
我知道这个问题很久以前就有了,但我偶然发现了同样的问题,下面是我采用的方法。
为了确保我们在同一页面上...
最初,我(我假设你也是)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
然而,这就是我想要的:
$ 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
方法
我采用的方法与@Kapitol 的第二个建议类似。但是,我创建了一个 shell 脚本而不是别名,因为我希望其他命令(包括 pyenv
)能够找到我的新 python3
命令。
我创建了 ~/bin/python3
(我的 $PATH
变量中有 ~/bin
),内容如下:
#!/bin/sh
# PYENV_VERSION="$( pyenv versions | tr -d ' ' | awk '/^3\./ { print }' | tail -n 1 )" pyenv exec python3 $@
# Or simply,
PYENV_VERSION="3.7.4" pyenv exec python3 $@
使用这个 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
注1:在shell脚本中使用exec python3 $@
代替pyenv exec python3 $@
不起作用,因为它变成了对脚本本身的无限递归调用(取决于$PATH
).使用 pyenv exec
可确保无论 $PATH
变量如何排序,pyenv
Python 都会被调用。
注意 2:让所有获取最新版本的管道都由 pyenv
管理确实会在调用 python3
时减慢启动速度。因此,如果您有想要使用的特定版本,我建议您在 PYENV_VERSION
中简单地设置您想要的 Python 版本。
注意 3:请注意,pip3
和其他命令将无法通过此方法找到。一种解决方案是为您使用的每个命令创建一个 shell 脚本。另一种解决方法是运行pyenv global system 3.7.4
这样如果系统没有安装命令pyenv
可以在3.7.4中搜索
检查它是否有效
为了确保一切都按预期工作,我编写了以下 Python 脚本:
#!/usr/bin/env python
import sys
print(sys.version)
和运行:
$ ./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]
将第一行改为#!/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]
总而言之,通过上述方法,您可以让 python
指向系统的 Python 2,同时让 python3
指向安装了 pyenv
的版本。
Pyenv 允许您使用 "advanced" 模式
同时使用不同版本的 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
更多信息请查看: https://github.com/pyenv/pyenv/blob/master/COMMANDS.md#pyenv-local-advanced