Mac下python多版本的靈活切換pyenv

python的版本多是一個另初學者很頭疼的問題. 可能有些代碼是 在python2.*的版本下開發的, 一些安裝包也都是在 2.*的環境下使用的. 各類版本混亂的問題隨之產生.那要怎麼解決這個版本混亂的問題呢?python

pyenv

pyenv的介紹

簡單的說, pyenv就是管理python版本的工具, 各個版本之間相互獨立, 互不干擾.sql

pyenv的安裝

咱們使用brew來安裝pyenv, 能夠在brew中查看介紹和安裝步驟shell

brew命令相似於RHEL的yum和ubuntu的apt-get命令bootstrap

安裝好brew以後, 咱們使用brew安裝pyenvubuntu

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這個命令進行安裝的時候出現以下報錯xcode

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便可解決, 我試了無效.bash

使用brew install zlib 安裝zlibide

$ 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插入內容, 以後保存退出便可ui

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結合虛擬環境則會很是的好用

相關文章
相關標籤/搜索