在日常使用的时候,可能需要不同的python版本或者不同的依赖库,那解决方法就是可以使用 pyenv 来建立多个虚拟环境,在虚拟环境中可以使用不同的python版本和依赖库。
安装
我们需要安装2个工具,pyenv和pyenv-virtualenv。
pyenv是让不同版本python共存,pyenv-virtualenv是 pyenv的插件,解决在不同项目所依赖的软件包之间可能产生冲突的问题。在实际使用python时,经常出现这种情况:
通过
pip
安装软件包 A 时安装了 A 所依赖的软件包 B;之后又通过pip
安装软件包 C 时再次安装了 B 并将之前的覆盖,但是因为 C 和 A 所依赖的 B 版本不同,安装完 C 后导致 A 无法运行。
pyenv-virtualenv 可以为每个项目创建单独的虚拟环境来解决上面的问题。
在Mac上使用 Homebrew 进行安装:
$ brew install pyenv
$ brew install pyenv-virtualenv
Windows10安装
终于Windows上也可以用上pyenv了,安装过程也很简单:
# 安装pyenv 指定安装路径
pip3 install pyenv-win --target $HOME\.pyenv
# 配置系统环境
[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")
[System.Environment]::SetEnvironmentVariable('path', $HOME + "\.pyenv\pyenv-win\bin;" + $HOME + "\.pyenv\pyenv-win\shims;" + $env:Path,"User")
配置系统环境后重启就可以使用下面的命令了。
使用
安装需要的python版本:
$ pyenv install 3.6.1
创建一个虚拟环境:
$ pyenv virtualenv 3.6.1 mpython-3.6.1
直接进入需要使用虚拟环境的目录,可以手动打开和退出虚拟环境:
$ pyenv activate mpython-3.6.1
$ pyenv deactivate
打开后所有的操作就是在这个环境下进行的了,但是每次都手动打开比较麻烦,我们想每次进入文件夹后自动切换,添加pyenv virtualenv-init
到shell的配置文件中:
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
注意:如果是zsh用~/.zshenv或者~/.zshrc,而不是~/.bash_profile。不同系统会有区别注意修改
接着就直接在目录下创建一个.python-version
的文本文件将虚拟环境名称(如mpython-3.6.1
)写在里面,就可以自动打开与关闭了。
常用命令
$ pyenv install --list #列出可供安装的 python 版本
$ pyenv install <version> #安装指定版本的 python
$ pyenv local <version> #在当前目录下设置 python 版本
$ pyenv versions #列出系统中安装的 python 版本
$ pyenv version #显示当前目录下采用的 python 版本
$ pyenv virtualenv [version] <venv-name> #创建虚拟环境
$ pyenv activate <venv-name> #打开虚拟环境
$ pyenv deactivate #退出虚拟环境
有问题看这里
我遇到的问题:
一定要注意终端用的是什么,我应该配置到~/.zshenv。
有其他问题参考:
Python版本管理:pyenv和pyenv-virtualenv(MAC、Linux)、virtualenv和virtualenvwrapper(windows)
使用pyenv与pyenv-virtualenv管理python环境
- 在ubuntu安装python时可能会出错,那是因为pyenv使用编译的方式安装python, 需要安装编译所需的一些库
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
离线安装
由于国内的原因,在线安装python老是没有反应,我们可以使用离线方法来进行安装。进入pyenv目录,并创建chache文件夹
$ cd ~/.pyenv/
$ mkdir cache
进入cache目录,使用wget获取离线包,也可下载离线包后放入目录
$ wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tar.xz
# or
$ wget https://mirrors.huaweicloud.com/python/3.8.5/Python-3.8.5.tar.xz
再执行安装命令就安装python完成了
$ pyenv install 3.8.5