在开发Python程序的时候,有时候可能需要在不同版本的 Python
上进行测试。pyenv就是这么一个管理多版本 Python
的工具。pyenv
是利用系统环境变量 PATH
的优先级,劫持 python
的命令到 pyenv
上,根据用户所在的环境或目录,使用不同版本的 python
。
Mac下安装
安装
Mac OSX下可直接使用brew
安装
# brew update
# brew install pyenv
设置环境变量
如果使用的是 bash
,将以下环境变量添加到 ~/.bash_profile
,如果使用的是 zsh
,则添加到 ~/.zshrc
# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
启动shell时,自动初始化pyenv
# echo 'eval "$(pyenv init -)"' >> ~/.zshrc
重载配置文件
# source ~/.zshrc
查看pyenv版本
# pyenv -v
pyenv 1.2.14
CentOS下安装
安装
由于pyenv是通过下载 python
源码包编译安装,为了保证在编译时不出错,建议安装前安装相关依赖环境(当前环境 CentOS Linux release 7.7.1908 (Core) Minimal
仅安装libffi-devel
,个例不代表全部 )
# yum install -y gcc tk-devel @development zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils
Github地址:
一般在使用python的时候会涉及到多个版本、不同版本的python创建的虚拟环境,手动安装pyenv
后同样需要手动安装pyenv-virtualenv
才能管理多个不同的虚拟环境。为了安装方便,我们选用官方提供的一键式安装脚本来直接安装pyenv
与pyenv-virtualenv
。
# curl https://pyenv.run | bash
设置环境变量
然后添加环境变量到你当前使用的shell
- bash:
vim ~/.bashrc
- zsh:
vim ~/.zshrc
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
重载配置文件
# source ~/.zshrc
查看pyenv版本
# pyenv -v
pyenv 1.2.14
使用
pyenv常用命令
注:使用local、global、shell,设置Python版本时需要跟上参数(版本号),查看则不需要。
使用方式: pyenv <命令> [<参数>]
命令:
commands 查看所有命令
local 设置或显示本地的Python版本
global 设置或显示全局Python版本
shell 设置或显示shell指定的Python版本
install 安装指定Python版本
uninstall 卸载指定Python版本)
version 显示当前的Python版本及其本地路径
versions 查看所有已经安装的版本
which 显示安装路径
pyenv
- 查看系统当前安装的python列表
# pyenv versions
- 列出可安装版本
# pyenv install --list
- 安装指定版本 Python
# pyenv install <版本号>
- 卸载指定版本 Python
# pyenv uninstall <版本号>
- 显示当前python安装路径
# pyenv which python
- 设置全局的 Python 版本,通过将版本号写入
~/.pyenv/version
文件的方式
# pyenv global <版本号>
- 设置面向程序的本地版本,通过将版本号写入当前目录下的
.python-version
文件的方式。通过这种方式设置的Python
版本优先级较global
高。
# pyenv local <版本号>
- 设置面向
shell
的Python
版本,通过设置当前shell
的PYENV_VERSION
环境变量的方式。这个版本的优先级比local
和global
都要高。
# pyenv shell <版本号>
* `--unset` 参数可以用于取消当前 `shell` 设定的版本。
# pyenv shell --unset
pyenv-virtualenv
- 查看所有虚拟环境
# pyenv virtualenvs
- 创建指定python版本的虚拟环境
# pyenv virtualenv <python版本> <虚拟环境名>
- 使用虚拟环境生效
# pyenv activate <虚拟环境名>
- 退出虚拟环境
# pyenv deactivate
- 删除虚拟环境,简单粗暴地将整个目录干掉即可
# pyenv uninstall <虚拟环境名>
修改pip源
在使用python时如果网络状态不佳直接从官方pip仓库拉取代码速度较慢,推荐使用阿里云pypi镜像仓库
# mkdir ~/.pip && vim ~/.pip/pip.conf
添加如下内容
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
常见问题
在尝试安装新的Python版本之前,请先安装Python构建依赖项,pywiki 如果您在安装python版本时遇到问题,请访问有关常见构建问题的Wiki页面
pyinstaller
直接使用pyenv install 3.7.5
安装后使用pyinstaller
打包会报如下错误
OSError: Python library not found: libpython3.7m.so.1.0, libpython3.7.so.1.0, libpython3.7mu.so.1.0
This would mean your Python installation doesn't come with proper library files.
This usually happens by missing development package, or unsuitable build parameters of Python installation.
* On Debian/Ubuntu, you would need to install Python development packages
* apt-get install python3-dev
* apt-get install python-dev
* If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
需要使用如下方法重新安装python:
- Mac OSX
# env PYTHON_CONFIGURE_OPTS="--enable-framework" pyenv install 3.7.5
- CentOS
# env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.7.5
pip install报错
使用pip install
时报错如下:ModuleNotFoundError: No module named '_ctypes'
需要安装相关依赖包libffi-devel
,后再次重新编译安装python
# yum -y install libffi-devel