一般Linux默认版本都是Python2的版本,现在越来越多的项目使用Python3,我们需要安装不同的Python版本,又不想引起冲突,可以使用Python多版本管理工具
1. 下载pyenv:https://github.com/pyenv/pyenv#installation
// git速度慢,建议电脑代理download下载然后传到服务器/root目录
2. 解压pyenv:yum install -y unzip && unzip pyenv-master.zip
[root@ubuntu2020 ~]#mkdir -p .pyenv/cache
[root@ubuntu2020 ~]#unzip pyenv-master.zip
[root@ubuntu2020 ~]# mv pyenv-master/* .pyenv/
3. 设置环境变量
[root@ubuntu2020 ~]# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
[root@ubuntu2020 ~]# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
[root@ubuntu2020 ~]# echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
[root@ubuntu2020 ~]# exec $SHELL
[root@ubuntu2020 ~]# source ~/.bash_profile
4. 查询可安装版本
[root@ubuntu2020 ~]# pyenv install -l
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
......
5. 安装Python3相关依赖,以便安装Python3版本
如果缺少相关依赖,会出现以下报错
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
[root@ubuntu2020 ~]# yum install readline readline-devel readline-static -y
[root@ubuntu2020 ~]# yum install openssl openssl-devel openssl-static -y
[root@ubuntu2020 ~]# yum install sqlite-devel -y
[root@ubuntu2020 ~]# yum install bzip2-devel bzip2-libs -y
[root@ubuntu2020 ~]# yum install gcc gcc-c++ -y
6. 安装其他版本Python
[root@ubuntu2020 ~]# pyenv install 3.7.2
WARNING: Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
Installing Python-3.7.2...
Installed Python-3.7.2 to /root/.pyenv/versions/3.7.2
// 这里下载的都是使用国外的服务器,有时候下载失败,可以去官网通过代理手动下载下来
官网下载地址:https://www.python.org/downloads/source/
选则需要版本:Download XZ compressed source tarball
上传到服务器/root/.pyenv/cache目录下即可,这样安装的时候直接读取该目录
[root@ubuntu2020 ~]# cd /root/.pyenv/cache/
[root@ubuntu2020 cache]#ll
total 84404
-rw-r--r-- 1 root root 17212220 May 9 19:25 Python-3.6.10.tar.xz
-rw-r--r-- 1 root root 17049912 May 9 19:25 Python-3.6.5.tar.xz
-rw-r--r-- 1 root root 17042320 May 9 19:25 Python-3.7.2.tar.xz
-rw-r--r-- 1 root root 17246360 May 9 19:25 Python-3.7.6.tar.xz
-rw-r--r-- 1 root root 17869888 May 9 19:25 Python-3.8.2.tar.xz
[root@ubuntu2020 ~]# pyenv versions//查看已安装版本
* system (set by /root/.pyenv/version)
3.7.2
[root@ubuntu2020 ~]# pyenv local
pyenv: no local version configured for this directory
[root@ubuntu2020 ~]# pyenv local 3.7.2
[root@ubuntu2020 ~]# pyenv local// 切换当前目录指定Python版本,切换到其他目录会变成默认Python版本
3.7.2
[root@ubuntu2020 ~]# pyenv versions
system
* 3.7.2 (set by /root/.python-version)
[root@ubuntu2020 ~]# cd /workspace/
[root@ubuntu2020 workspace]# pyenv versions//其他目录还是默认Python
* system (set by /root/.pyenv/version)
3.7.2
使用global全局切换Python版本,这样不用每个目录选择版本了
[root@ubuntu2020 workspace]# cd
[root@ubuntu2020 ~]# pyenv global 3.7.2
[root@ubuntu2020 ~]# pyenv versions
system
* 3.7.2 (set by /root/.python-version)
[root@ubuntu2020 ~]# cd /workspace/
[root@ubuntu2020 workspace]#pyenv versions
system
* 3.7.2 (set by /root/.pyenv/version)
[root@ubuntu2020 workspace]#
--------------------------------------------------------------------------------------------------------------------------------
7. 创建Python虚拟环境,一般可以选择使用virtualenv或者pyenv-virtualenv,我个人喜欢virtualenv(推荐)
不推荐使用virtualenvwrapper,一般线上环境,不同的运行环境通常不会全部使用root,这种把所有虚拟环境集中放在root目录下的放式反而麻烦
安装virtualenv,个人建议不同的Python单独安装该包,这样配合使用pyenv就不用每次都创建虚拟环境指定Python版本了
[root@ubuntu2020 ~]# pip list|grep virtual
You are using pip version 18.1, however version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@ubuntu2020 ~]# pip install virtualenv
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
Collecting virtualenv ...
[root@ubuntu2020 ~]# pip list|grep virtual
virtualenv 20.0.20
创建Python3虚拟环境
[root@ubuntu2020 ~]# virtualenv test
created virtual environment CPython3.7.2.final.0-64 in 319ms
creator CPython3Posix(dest=/root/test, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
[root@ubuntu2020 ~]# source test/bin/activate
(test) [root@ubuntu2020 ~]# which python
/root/test/bin/python
创建Python2虚拟环境
[root@ubuntu2020 ~]#pyenv global system
[root@ubuntu2020 ~]#pyenv versions// 此时发现并没有切换回默认版本,因为之前执行过pyenv local,在当前目录生成了一个.python-history文件记录了版本
system
* 3.7.2 (set by /root/.python-version)
[root@ubuntu2020 ~]# ls -al
total 84
....
-rw------- 1 root root 7 May 9 20:06 .python_history
-rw-r--r-- 1 root root 7 May 9 20:08 .python-version
[root@ubuntu2020 ~]# pyenv local system //切换到默认版本,然后删除该文件,以后都用 pyenv global 切换版本即可
[root@ubuntu2020 ~]# pyenv versions
* system (set by /root/.python-version)
3.7.2
[root@ubuntu2020 ~]# pip list|grep virtual // 默认的Python已经安装了该包
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
virtualenv 20.0.20
WARNING: You are using pip version 19.1.1, however version 20.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@ubuntu2020 ~]# virtualenv demo
created virtual environment CPython2.7.5.final.0-64 in 427ms
creator CPython2Posix(dest=/root/demo, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)
activators PythonActivator,CShellActivator,FishActivator,PowerShellActivator,BashActivator
--------------------------------------------------------------------------------------------------------------------------------
使用pyenv-virtualenv来管理虚拟环境
下载文件包:https://github.com/pyenv/pyenv-virtualenv
上传到服务器,解压到/root/.pyenv/plugins/pyenv-virtualenv目录
或者直接使用git拉去下来,如果网络允许的前提下
[root@ubuntu2020 ~]# yum install git
[root@ubuntu2020 ~]# git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
Cloning into '/root/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 2064, done.
remote: Total 2064 (delta 0), reused 0 (delta 0), pack-reused 2064
Receiving objects: 100% (2064/2064), 580.31 KiB | 25.00 KiB/s, done.
Resolving deltas: 100% (1413/1413), done.
设置bash shell环境变量,其他请看github说明
[root@ubuntu2020 ~]# echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
[root@ubuntu2020 ~]# exec $SHELL
创建不同版本寻环境,pyenv virtualenv 版本号 环境名。注意,此种放式类似virtualenvwrapper,不是很推荐(环境都安装在 /root/.pyenv/versions/ 里)
[root@ubuntu2020 ~]# pyenv virtualenv 3.7.2 py-testcreated virtual environment CPython3.7.2.final.0-64 in 158ms
creator CPython3Posix(dest=/root/.pyenv/versions/3.7.2/envs/py-test, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
Looking in links: /tmp/tmpis2fllcc
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.7.2/envs/py-test/lib/python3.7/site-packages (46.1.3)
Requirement already satisfied: pip in /root/.pyenv/versions/3.7.2/envs/py-test/lib/python3.7/site-packages (20.1)
[root@ubuntu2020 ~]# pyenv virtualenv system py-test-2.7
created virtual environment CPython2.7.5.final.0-64 in 206ms
creator CPython2Posix(dest=/root/.pyenv/versions/py-test-2.7, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/root/.local/share/virtualenv/seed-app-data/v1.0.1)
activators PythonActivator,CShellActivator,FishActivator,PowerShellActivator,BashActivator
Installing pip from https://bootstrap.pypa.io/get-pip.py...
...