今天遇到了这么一个问题,在一台服务器上,已经安装了python2.7 和 python3.5 。且服务器中已经运行着两个相关Python版本的程序。今天,我想把一个新的项目放到此服务器上,但这个项目要求的python最低版本是3.6。
为了不影响其他已经在运行的项目,我尝试了使用virtualenv去做隔离,但后来了解到,virtualenv只是在管理已有的python及python项目,无法去创建一个新的python版本的环境。难道说,还需要我在保留python3.5 的情况下,再去安装一个python3.6吗?事实上,我并不清楚python3.5和python3.6能否共存,但我又不敢轻易去尝试安装,因为我怕影响到已经运行的程序。
再后来,我了解到pyenv+virtualenv可以帮我解决上面的问题,而且这么做,可以将以后的每个项目的环境独立出来。下面记录使用过程:
一 安装pyenv
【方式1】使用命令行进行自动安装(可能会因为网络原因(你懂得)无法顺利安装,直接看方式2吧)
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
安装后,会在终端窗口中显示以下三行:
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
将上面的三行,复制下来,找到你的.bashrc 文件,粘贴到末尾,然后更新环境变量
source ~/.bashrc
或者使用命令,直接更新到环境变量:
export PATH="~/.pyenv/bin:$PATH" >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
【方式2】 从github上拉取安装,这种方式需要单独安装 virtualenv
安装pyenv并设置环境
mkdir ~/.pyenv
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l
安装virtualenv并设置环境
git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
exec $SHELL -l
重载环境配置文件
source ~/.bashrc
三 检查是否安装成功
pyenv -v
如果出现版本号,代表安装成功。
下面是怎么用pyenv和virtualenv 去安装新的python版本及创建新的项目,我这里使用 python3.7.5 做为例子
1 查看现在已有的python版本
pyenv versions
这条命令会列出使用pyenv安装的所有的python版本,但第一次的时候,这里是没有版本信息的,就像下面这样:
root@xxxxx:~# pyenv versions
* system (set by /root/.pyenv/version)
2 查看可安装的python版本列表
pyenv install --list
这条命令会列出很多pyhon版本,看一下你想安装的版本在不在里面,如过在,继续往下执行
3 安装python3.7.5
安装 3.7.5 版本
pyenv install 3.7.5
可能需要等待一会,我安装的时候,等了挺久的。可能还有下载不下来的情况。你还可以去官网下将Python-3.7.5.tar.xz文件下载下来,放到~/.pyenv/cache 目录中,然后再执行上面的语句安装,稍等会就可以了。
4 检查是否安装成功
执行 1 中的指令,看是否列出了 3.7.5 ,如果有就可以了。
root@iZ2zegzvor1tqtclfu59opZ:~# pyenv versions
* system (set by /root/.pyenv/version)
3.7.5
5 创建新的项目
进入项目目录创建项目文件夹,我下面举个例子
cd /home/
mkdir pyenv_demo
cd pyenv_demo
为这个项目设置python版本
pyenv local 3.7.5
检查当前项目python版本,还是在 pyenv_demo 这个路径上执行
python
可以看到,当前项目python已经是 3.7.5 了。
在切到其他路径执行命令,会看到结果是3.5 或2.7
以上操作会在某些情况下,未达到预期,我先找找原因再来更新。
到了这一步,环境已经可以使用了,但是如果一台服务器上有多个项目,又不想共用一个3.7.5的环境,这时候就需要创建虚拟环境将他们隔离开了。
6 使用虚拟环境
为此项目创建虚拟环境,取名为env_375
pyenv virtualenv env375
创建完成后,再次查看pyenv安装的版本,会发现出现了虚拟环境
pyenv versions
3.7.5
3.7.5/envs/env375
env375
接下来就是激活环境,两种方式激活环境和退出环境,选择一种激活即可
pvenv local env375
pyenv local --unset # 对应的退出环境
pyenv activate env375
pyenv deactivate env375 # 对应的退出环境
2020-05-19 更新:
使用pyenv安装指定版本的python时,报错疑似缺少库
Installing Python-3.5.0...
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
Please consult to the Wiki page to fix the problem.
https://github.com/pyenv/pyenv/wiki/Common-build-problems
跳转到 https://github.com/pyenv/pyenv/wiki/Common-build-problems 查看原因,按照文档说明的进行安装。