早先聽說python的時候已經是2.x和3.x並存了,據說3.x還不兼容2.x,想着這高版本連自己的舊版本都不兼容,這格局應該也發展不咋地.
時間是把殺豬刀,機器學習這個神奇的東西最終把這門語言再次推向了高潮,最神奇的是連運維都要和機器學習沾邊,美其名:AiOps.這不行啊,不學習一下機器學習都跟不上運維的發展趨勢了,於是機器學習沒學咋地,python倒是比較溜了.
學python一般都系統自帶2.7,但對於我這半道入門的選手,實在沒必要卡在2.x系列.於是多版本python管理是要玩溜的第一步.今天我們就一起學習一下python處理管理工具
pyenv安裝
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
or
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
設置環境變量:
兩種Shell,bash用第一種,我是zsh所以我用第二種
vim ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
$ source ~/.bashrc
或者
$ vi ~/.zshrc:
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
然後同樣激活上面的配置:
$ source ~/.zshrc
現在我們就可以使用pyenv了:
pyenv versions
* system (set by /Users/rainbird/.pyenv/version)
3.7.3
3.7.5
3.8.2
星號表示當前正在使用的Python版本。
正常應該顯示空吧?我上面列出來是我本地使用的版本(看看,都低於3.7吧)
查看所有可安裝的Python版本:
pyenv install -l
安裝與卸載:
pyenv install 3.7.3 # 安裝python3.7.3
pyenv uninstall 3.7.3 # 卸載python3.7.3
設置python版本
對所有的Shell全局有效,會把版本號寫入到~/.pyenv/version文件中
pyenv global 3.7.3
只對當前目錄有效,會在當前目錄創建.python-version文件
pyenv local 3.7.3
只在當前會話有效
pyenv shell 3.7.3
重置版本設置
只有 pyenv shell 和 pyenv local 命令有--unset參數
pyenv shell --unset
pyenv local --unset
常見問題:
-
下載過慢
pyenv install執行以後,由於使用下載源碼包使用的官方地址,很大概率會卡在第一步的下載,這時候我一般會選擇使用sohu源,將源文件下載到pyenv的cache目錄,然後再執行pyenv install.
以3.8.2爲例export v=3.8.2;wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v
-
各種找不到問題一步解決
apt-get install build-essential zlib1g-dev libffi-dev libbz2-dev libreadline-dev libssl-dev libsqlite3-dev -y
-
找不到C編譯器
configure: error: no acceptable C compiler found in $PATHapt-get install build-essential -y
-
找不到zip模塊
zipimport.ZipImportError: can't decompress data; zlib not availableapt-get install zlib1g-dev -y
-
找不到ctypes
ModuleNotFoundError: No module named '_ctypes'apt-get install libffi-dev
- bz2擴展未編譯
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?apt-get install -y libbz2-dev libreadline-dev
-
readline擴展未編譯
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?apt-get install -y libbz2-dev libreadline-dev
-
ssl擴展未編譯
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?apt-get install libssl-dev -y
- sqlite3未編譯
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?apt-get install libsqlite3-dev -y