Python 环境
python版本众多,不同版本之间可能有冲突。而且不同的包环境又可能会相互冲突,比如A包依赖B包的2.0版本,但是又有C包依赖于B包的3.0版本。这样就有冲突了。 所以我们需要不同的python环境来隔离。这里的python环境是广义的,细分则又可以分为,python版本环境和python同版本的不同包环境。
mac 上推荐使用pyenv
来管理python版本环境,再加上插件pyenv-virtualenv
,使得pyenv还可以用来管理python的虚拟包环境。包括创建和使用。
工具安装
# 安装pyenv
brew install pyenv
# 安装 pyenv-virtualenv
brew install pyenv-virtualenv
通过上面命令只是初步安装了这两个软件,要想在shell中完美的使用,还需要在shell中做一些额外配置。这部分内容不同的shell的配置手法略有不同,我的shell是fish,所以我以fish的配置为例。
- 首先在shell中执行以下命令:
set -Ux PYENV_ROOT $HOME/.pyenv
fish_add_path $PYENV_ROOT/bin
- 然后在fish.config 文件追加写入
# 配置 pyenv
pyenv init - | source
# 配置 pyenv-virtualenv
status --is-interactive; and pyenv virtualenv-init - | source
- 重启shell即可应用。
工具使用
pyenv使用
1. 使用pyenv安装不同版本的python
# 列出所有可通过 pyenv 安装的 Python 版本
$ pyenv install --list
# 安装所需版本的 Python
$ pyenv install 3.11
# pyenv 会检索并安装符合要求的最新版 Python,目前为 3.11.5
# 查看所有通过 pyenv 安装的 Python 版本
$ pyenv versions
* system (set by /Users/user/.pyenv/version)
3.11.5
# 查看 Python 的实际安装位置
$ ls ~/.pyenv/version
3.11.5
# 查看当前激活的 Python 版本及其被那个文件或环境变量设置
$ pyenv version
system (set by /Users/user/.pyenv/version)
2. 指定不同位置使用的python版本
global命令指定全局的python版本
# 查看全局默认 Python 版本
$ pyenv global
# 将全局默认 Python 指定为 3.10.13
$ pyenv global 3.10.13
$ pyenv version
3.10.13 (set by /Users/user/.pyenv/version)
$ cat ~/.pyenv/version
3.10.13
# 将全局默认 Python 指定回系统自带版本
$ pyenv global system
local 命令指定当前文件夹下的python版本
# 查看局部 Python 版本
$ pyenv local
# 将局部 Python 指定为 3.11.5
$ cd project
$ pyenv local 3.11.5
$ pyenv version
3.11.5 (set by /Users/user/project/.python-version)
$ cat .python-version
3.11.5
# 撤销之前指定过的局部 Python 的版本
$ pyenv local --unset
shell命令指定当前shell下使用的python版本,该设置优先级大于global和local。
# 查看当前 Shell 的 Python 版本
$ pyenv shell
# 将当前 Shell 的 Python 版本指定为 3.12-dev
$ pyenv shell 3.12-dev
$ pyenv version
3.12-dev (set by PYENV_VERSION environment variable)
$ echo $PYENV_VERSION
3.12-dev
# 撤销之前指定过的当前 Shell 中的 Python 版本
$ pyenv shell --unset
pyenv-virtualenv使用
Python虚拟环境相当于一个独立的 Python 版本,有自己独立的目录,也可独立安装第三方库,而不会对外界产生影响。这样不同项目都有互相独立的运行环境,非常便于项目开发。
pyenv-virtualenv 是 pyenv 的一个插件,用于管理虚拟环境。它只要创建出了虚拟python环境,它的使用和pyenv是一致的,所以主要特别之处在于如何创建虚拟python包环境。
创建虚拟环境,使用virtualenv最大的特点在于可以不在执着于pyhton的版本了,而是可以自由命名一个新环境来使用它。在使用pyenv 的global、local、shell等指定python版本命令时,现在可以直接指定这个虚拟环境名了!
$ pyenv virtualenv [Python_version] <environment_name>
# 列出创建的所有虚拟环境 (也可直接使用 pyenv versions,更通用)
$ pyenv virtualenvs
参考文档:
pyenv github
pyenv-virtualenv github
使用 pyenv 管理 Python 版本和虚拟环境