使用python进行开发,Unix/Linux 的环境会更加友好,不会出现莫名其妙的bug,虽然 windows store 也发布了 Ubuntu 子系统,但是功能不够全,系统不够完善。本文全面介绍了 Ubuntu、Archlinux、Centos、Mac下安装和使用pyenv的方法。Windows下使用pyenv的方法请移步 pyenv-win 源码地址查看: https://github.com/pyenv-win/pyenv-win ,当然pyenv也可以在Windows store的Linux子系统中使用。
python 版本比较多,2 和 3 相差比较大,当你需要不同环境的时候,选择使用 docker,docker的使用教程可以在菜鸟教程找到
https://www.runoob.com/docker/docker-tutorial.html
也可以在官网查找相关文档
https://www.docker.com/
如果用 docker 那就不需要隔离环境了,如果要直接运行在服务器上,那就必须有隔离环境。本文将会介绍使用pyenv来创建不同python版本的虚拟环境。
使用 pyenv 和 pyenv-virtualenv ,在 Linux 下完美隔离 python 各个版本
注意: 本文的 Linux和Mac OS X 下进行,不涉及 windows下的安装使用
清单
在各大 Linux 的发行版下安装 git 都非常简单,此处只展示部分示例
sudo pacman -S git
sudo apt install git
sudo yum install git
brew install git
Ubuntu下使用 shell
Ctrl + Alt + t 快捷键打开终端
说明: 本文的所有安装都严格遵守官方文档,与官方文档完全保持一致。
源码git 地址:https://github.com/pyenv/pyenv
在终端中执行如下命令完成安装:
首先把项目克隆下来,放在家目录下的隐藏文件夹中:.pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
如果你是Mac用户,可以使用brew命令来安装
brew update
brew install pyenv
然后配置环境变量:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init-)"\nfi' >> ~/.bash_profile
echo 命令的含义是:将引号中内容写入某文件中
请注意,以上的三条 echo 命令的最后一条命令,请保证它引号中的内容处于 ~/.bashrc 或者 ~/.zshrc 的最底部。
因为在 pyenv 初始化期间会操作 path 环境变量,导致不可预测的行为。
查看文件的底部内容,可以使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,编辑文件可以使用 vim 或者 vscode
然后,在使用 pyenv 之前,需要初始化 shell 环境,执行如下命令
exec $SHELL
或者source ~/.bashrc
同样也可以关闭当前的终端窗口,重新启动一个。
源码git 地址:https://github.com/pyenv/pyenv-virtualenv
把插件克隆在刚才已经安装完毕的 pyenv 的 plugins 文件夹中
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
如果你是Mac用户可以使用brew命令来安装
brew install pyenv-virtualenv
然后配置环境变量
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
最后,在使用 pyenv 之前,重新初始化 shell 环境,执行如下命令
exec $SHELL
或者source ~/.bashrc
或者重启一个终端窗口。
没有出错的话,此时已经完成了所有的安装操作,如果提示错误,请检查前文中的路径和环境变量(请检查是否使用对应系统环境的命令)是否配置正确,或者将操作回退,重新执行安装命令
此处仅展示 pyenv 和 pyenv-virtualenv 的日常用法
检查安装是否正确
pyenv version
pyenv versions
如果显示了正常的版本信息,说明安装成功,如果显示类似于 command not found 之类的提示,说明安装失败,请查看第一章末尾的提示。
安装 3.6.6 版本的 python
pyenv install 3.6.6
这里需要注意,某些情况下会安装失败,Build failed.
Don’t panic,我们可以查看pyenv在github wiki里面准备的应对方案,原文地址 https://github.com/pyenv/pyenv/wiki
摘录如下,只需要执行对应的命令即可:
sudo pacman -S base-devel openssl zlib
brew install openssl readline sqlite3 xz zlib
如果你使用的是OS X Mojave或者更高的版本(10.14+),还需要执行一下命令
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev
sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel
zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel tk-devel
sudo eopkg it -c system.devel
sudo eopkg install git gcc make zlib-devel bzip2-devel readline-devel sqlite3-devel openssl-devel tk-devel
brew install bzip2 openssl readline sqlite xz
安装完这些补充的工具之后,再次执行:
pyenv install 3.6.6
就可以成功了,你可以不断的使用pyenv versions
来查看被 pyenv 托管的 python 版本,多版本之间不会冲突,完美共存
执行pyenv install
,然后按下 tab 键,就可以看到所有可选的安装版本
如何使用已经安装的版本创建虚拟环境
pyenv和pyenv-virtualenv的协作可以这么理解:
pyenv 托管安装的 python 版本,python-virtualenv 则调用对应的 python 版本
下面是如何创建和使用虚拟环境
首先需要创建一个虚拟环境,执行命令:
pyenv virtualenv 3.6.6 my-env
最后一个是环境的名字,可以随便取。安装成功会显示:
Looking in links: /tmp/tmp0eywgc7v
Requirement already satisfied: setuptools in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (39.0.1)
Requirement already satisfied: pip in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (10.0.1)
它写明了该虚拟环境的绝对路径。
在任意目录下,执行命令:
pyenv activate my-env
在终端命令行前面,会出现(my-env)
的提示,进入python环境可以看到版本为虚拟环境设定的3.6.6,使用pip --version
,可以看到 pip 包安装的绝对路径
使用终端进入任意目录,比如 ~/envtest
cd ~/envtest
然后在该目录下执行:
pyenv local my-env
也可以激活创建好的虚拟环境,执行:
ls -al
local命令和之前的命令区别在于,在 ~/envtest 目录下,会创建一个隐藏文件 .python-version,文件内容只包含一句话 my-env,只要使用终端进入 ~/test 目录,就会自动激活虚拟环境
退出虚拟环境使用下面两个中任意一条命令
pyenv deactivate # 或者
source deactivate
随着时间推移,你可能积攒很多虚拟环境,删除虚拟环境可以使用命令
pyenv uninstall my-env
或者rm -rf my-env
直接删除虚拟环境所在的目录
如果是用 git 克隆的,更新则使用git pull命令
cd ~/.pyenv
或者 cd $(pyenv root)
git pull origin master
Mac用户则使用brew命令
brew upgrade pyenv
由于 pyenv 把一切都放在 ~/.pyenv 下了,所以Linux下卸载分为两步
删除环境变量
执行:rm -rf ~/.pyenv
或者 rm -rf $(pyenv root)
Mac用户卸载需要使用brew命令:
brew uninstall pyenv
本文参考了官方文档并进行了修改,文档可以在源码github地址中找到
pyenv: https://github.com/pyenv/pyenv
pyenv-virtualenv: https://github.com/pyenv/pyenv-virtualenv