日常开发遇到的实际问题
因为Python版本一直更新,每个项目使用的Python版本不一样,有的项目使用Python3.6,有的使用Python3.7,有的使用Python2。
如果在官网下载指定的安装包进行安装,你会发现新安装的版本总会覆盖掉之前的版本,但是旧版本又有其他的项目在使用,并不想被删除。
这时就希望有一个工具可以方便地管理多个Python版本,最好还能多个版本之间相互切换。
pyenv正好满足这个需求。
简介
Simple Python version management:pyenv (点击进入GitHub主页)
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
安装
- 安装方式1. 仅限Mac
$ brew install pyenv
- 安装方式2. 自动安装脚本
pyenv-installer
使用
- 查看所有可用的版本
$ pyenv install -l
- 安装指定版本
-
$ pyenv install 3.6.5
默认会从python.org下载指定版本,速度却非常慢(除非你在墙外)。 -
安装指定的python离线安装包
这里,我们需要知道一点:pyenv不仅可以在线下载安装python版本,还可以从它的缓存目录~.pyenv/cache
安装离线安装包。其实执行$ pyenv install 3.6.5
,也是先检查缓存目录~.pyenv/cache
下是否存在指定安装包,如果没有就会从网络下载。
所以,我们可以在本地终端下载好指定版本安装包,比如:
$ wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
然后将其移动到.pyenv/cache
文件夹下,最后再次执行$ pyenv install 3.6.5
,便可顺利安装。
- 创建虚拟环境
例如:创建一个3.6.5版本的虚拟环境:$ pyenv virtualenv 3.6.5 env_***
- 查看所有的Python环境
$ pyenv versions
- 激活指定的虚拟环境
$ pyenv activate env_***
- 退出当前虚拟环境
$ pyenv deactivate
当然你也可以直接关掉终端。 - 删除虚拟环境
$ pyenv uninstall env_***
MacOS安装过程错误排查
MacOS在安装过程中可能会出现下面的问题:
...
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
这个问题在github上已被指出:Issue #454
解决方法就是需要从命令行更新Xcode,终端运行指令xcode-select --install
WTF!可能又会提示:...the tools are already installed.
一顿搜索,找到解决方法:# How to update Xcode from command line
方法就是终端运行指令softwareupdate --install -a
运行完成后,软件更新会弹出可用更新的提示,点击现在更新。
更新完成后,再次尝试安装,还是失败,提示同样的错误!!!
又是一顿搜索。。。
最后还是万能的Stack Overflow,找到了解决方法:# pyenv zlib error on MacOS:
只需要终端运行指令:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
然后再次执行安装pyenv install 3.6.5
就可以安装成功啦。
zhanglilongs-MacBook-Pro:~ zhanglilong$ sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
Password:
installer: Package name is macOS_SDK_headers_for_macOS_10.14
installer: Installing at base path /
installer: The install was successful.
zhanglilongs-MacBook-Pro:~ zhanglilong$ pyenv install 3.6.5
python-build: use openssl from homebrew
python-build: use readline from homebrew
Installing Python-3.6.5...
python-build: use readline from homebrew
Installed Python-3.6.5 to /Users/zhanglilong/.pyenv/versions/3.6.5
zhanglilongs-MacBook-Pro:~ zhanglilong$ pyenv versions
* system (set by /Users/zhanglilong/.pyenv/version)
3.6.5