python的版本可能是一个另初学者很头疼的问题. 可能有些代码是 在python2.*的版本下开发的, 一些安装包也都是在 2.*的环境下使用的. 各种版本混乱的问题随之产生.那要怎么解决这个版本混乱的问题呢?
pyenv
pyenv的介绍
简单的说, pyenv就是管理python版本的工具, 各个版本之间相互独立, 互不干扰.
pyenv的安装
我们使用brew来安装pyenv, 可以在brew中查看介绍和安装步骤
brew命令类似于RHEL的yum和ubuntu的apt-get命令
安装好brew之后, 我们使用brew安装pyenv
xxzxdeMacBook-Pro:~ xxzx$ brew install pyenv
xxzxdeMacBook-Pro:~ xxzx$ pyenv -v
pyenv 1.2.8
xxzxdeMacBook-Pro:~ xxzx$ pyenv versions
* system (set by /usr/local/var/pyenv/version)
3.6.5
xxzxdeMacBook-Pro:~ xxzx$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
...
复制代码
- * 表示当前正在使用的版本,system表示用的是系统python版本
- pyenv -v: 查看版本
- pyenv versions: 查看pyenv管理的所有版本
- pyenv install --list: 查看可安装的版本
使用pyenv安装python版本
pyenv安装好之后, 我们就可以使用了, 但我在使用pyenv install 3.6.5
这个命令进行安装的时候出现如下报错
xxzxdeMacBook-Pro:~$ pyenv install 3.6.5
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
python-build: use readline from homebrew
BUILD FAILED (OS X 10.14 using python-build 20180424)
Inspect or clean up the working tree at /var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705
Results logged to /var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705.log
Last 10 log lines:
File "/private/var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705/Python-3.6.5/Lib/ensurepip/__main__.py", line 5, in <module>
sys.exit(ensurepip._main())
File "/private/var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705/Python-3.6.5/Lib/ensurepip/__init__.py", line 204, in _main
default_pip=args.default_pip,
File "/private/var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705/Python-3.6.5/Lib/ensurepip/__init__.py", line 117, in _bootstrap
return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/private/var/folders/b_/4ggdxx_539g8cqp2wr2m5sph0000gn/T/python-build.20181012094932.14705/Python-3.6.5/Lib/ensurepip/__init__.py", line 27, in _run_pip
import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
复制代码
上面的倒数第二行的zlib not available
说zlib不可用, 百度有说使用xcode-select --install
即可解决, 我试了无效.
使用brew install zlib
安装zlib
$ brew install zlib
==> Downloading https://homebrew.bintray.com/bottles/zlib-1.2.11.mojave.bottle.t
######################################################################## 100.0%
==> Pouring zlib-1.2.11.mojave.bottle.tar.gz
==> Caveats
zlib is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.
For compilers to find zlib you may need to set:
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"
For pkg-config to find zlib you may need to set:
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"
==> Summary
/usr/local/Cellar/zlib/1.2.11: 12 files, 373KB
复制代码
这里要注意的是要配置环境变量
使用vi ~/.bash_profile
, 按键盘i
插入内容, 之后保存退出即可
export LDFLAGS="-L/usr/local/opt/zlib/lib"
export CPPFLAGS="-I/usr/local/opt/zlib/include"
export PKG_CONFIG_PATH="/usr/local/opt/zlib/lib/pkgconfig"
复制代码
使用 source ~/.bash_profile
执行一下
xxzxdeMacBook-Pro:~ xxzx$ vi ~/.bash_profile
xxzxdeMacBook-Pro:~ xxzx$ source ~/.bash_profile
xxzxdeMacBook-Pro:~ xxzx$ pyenv install 3.6.5
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.6.5.tar.xz...
-> https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz
Installing Python-3.6.5...
python-build: use readline from homebrew
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
Installed Python-3.6.5 to /usr/local/var/pyenv/versions/3.6.5
xxzxdeMacBook-Pro:~ xxzx$ brew install sqlite
复制代码
然后通过brew安装sqlite之后即可成功了. 这个时候我们再去查看当前的版本
xxzxdeMacBook-Pro:~ xxzx$ pyenv versions
* system (set by /usr/local/var/pyenv/version)
3.6.5
复制代码
切换版本
xxzxdeMacBook-Pro:~ xxzx$ pyenv global 3.6.5 # 全局切换
xxzxdeMacBook-Pro:~ xxzx$ python -V # 验证一下是否切换成功
xxzxdeMacBook-Pro:~ xxzx$ pyenv local 3.6.5 # 当前目录及其目录切换
xxzxdeMacBook-Pro:~ xxzx$ python -V # 验证一下是否切换成功
xxzxdeMacBook-Pro:~ xxzx$ pyenv uninstall 3.6.5 # 卸载pyenv管理的python版本
xxzxdeMacBook-Pro:~ xxzx$ pyenv local --unset # 解除local设置
xxzxdeMacBook-Pro:~ xxzx$ pyevn global system # 切换回系统版本
xxzxdeMacBook-Pro:~ xxzx$ pyenv commands # 查看命令
--version
commands
completions
exec
global
help
hooks
init
install
local
prefix
realpath.dylib
rehash
root
shell
shims
uninstall
version
version-file
version-file-read
version-file-write
version-name
version-origin
versions
whence
which
复制代码
在这里我们查看版本的时候可能还是系统的默认版本, 可以尝试使用python3 -V
查看, 如果依然有问题, 我们需要配置环境变量, 和上面的步骤一样
export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/shims:$PATH
复制代码
使用pyenv结合虚拟环境则会非常的好用