個人部落格: https://www.wzstyle.cn/678.html 去個人部落格通路體驗更好嗷 =。=
什麼是pyenv:
pyenv是一個forked自ruby社群的簡單、低調、遵循UNIX哲學的Python環境管理工具, 它可以輕松切換全局解釋器版本, 同時結合vitualenv插件可以友善的管理對應的包源。
為什麼使用pyenv:
為了在同一系統環境中使用不同版本的python,在項目開發中保證不同的包環境互不幹擾。
安裝Pyenv:
1、安裝git
yum -y install git
2、安裝Python編譯依賴
yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
3、建立使用者python
useradd python ; echo 123 |passwd python --stdin
并且su到python使用者下
4、使用python使用者登入後安裝Pyenv
Pyenv官網 https://github.com/pyenv/pyenv
Pyenv-installer插件 https://github.com/pyenv/pyenv-installer
下載下傳的 pyenv-installer 是一個shell腳本,直接執行以下這條指令:
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
上面這條指令可能無法通路,可以這樣解決:
用浏覽器打開https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer,将看到的網頁内容複制到伺服器的腳本當中,然後本地執行: bash pyenv-installer
注意:
- 在 https://github.com/pyenv/pyenv-installer 有安裝文檔
- 如果curl出現 curl: (35) SSL connect error ,是nss版本低的問題,更新它。目前nss版本隻有3.15。
可能需要配置一個有較新包的yum源:
[updates]
name=CentOS-Updates
baseurl=https://mirrors.aliyun.com/centos/6/os/x86_64/
gpgcheck=0
然後在更新nss : yum update nss ;也可以直接去阿裡鏡像下載下傳repo檔案後,更新。
5、安裝會提示在python使用者的~/.bash_profile中追加:
# Load pyenv automatically by adding
# the following to ~/.bashrc:
export PATH="/home/python/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
将上面3行内容寫入目前使用者的~/.bashrc或~/.bash_profile,我這裡放到~/.bash_profile中,然後source,或者退出再重連一下都行。pyenv就可以使用了。
這樣當python使用者啟動的時候,會執行使用者的.bash_profile中的腳本,就會啟動pyenv。
安裝好的pyenv就在 ~/.pyenv 目錄中。如果以後需要更新pyenv,可以使用 pyenv update 指令。
Pyenv的使用:
python -V | --version #檢視目前系統的python版本
echo $PATH #檢視目前系統的python路徑
pyenv指令:
- pyenv
pyenv 1.2.20
Usage: pyenv <command> [<args>]
Some useful pyenv commands are:
activate Activate virtual environment
commands List all available pyenv commands
……
- install
pyenv help install
pyenv install --list | less #檢視pyenv各版本
pyenv install 3.6.9 #安置pyenv指定版本
pyenv versions #檢視所有python版本
使用上面的方式是連接配接官網下載下傳指定版本,這樣安裝可能較慢,原因在于需要從外部下載下傳指定版本檔案到本地編譯,為了加速,可是選用cache方法,使用緩存方式安裝:
首先你可以在windows上下載下傳需要待安裝版本的軟體包,然後mkdir -p /home/python/.pyenv/cache
https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.xz
https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz
在建立的cache目錄中放入下載下傳好的軟體包後再執行安裝指令,會使用緩存安裝,而不是連接配接官網。
pyenv install 3.6.9 -vvv
pyenv install 3.7.7 -vvv
pyenv version #目前python版本,system表示目前作業系統使用的版本
system (set by /home/python/.pyenv/version)
pyenv versions #檢視所有已經安裝的版本,*星号表示目前版本
* system (set by /home/python/.pyenv/version)
3.6.9
3.7.7
pyenv的python版本控制:
global全局設定
#pyenv global xxx
python -V
Python 2.7.5
pyenv global 3.6.9 #執行之前python版本顯示2.7.5,執行後重新加載顯示變成了3.6.9
python -V
Python 3.6.9
pyenv global system #記得改回來
可以看到所有受pyenv控制的視窗中都是3.6.9的python版本了。
這裡用global是作用于非root使用者python使用者上,如果是root使用者安裝,請不要使用global,否則影響
更大。比如,這裡使用的CentOS6.5就是Python2.6,CentOS7使用了2.7,使用了global就成了3.x,會
帶來很不好的影響。建議不用。
shell 會話設定
影響隻作用于目前shell會話
#pyenv shell xxx 。也不推薦。
python -V ---> Python 2.7.5
pyenv versions
* system (set by /home/python/.pyenv/version)
3.6.9
3.7.7
pyenv shell 3.6.9
python -V ---> Python 3.7.7
pyenv versions
system
3.6.9
* 3.7.7 (set by PYENV_VERSION environment variable)
local 本地設定
使用pyenv local設定從目前工作目錄開始向下遞歸都繼承這個版本設定。推薦!
#pyenv local 3.6.9
#pyenv local --unset #取消local設定
cd /home/python/projects/pro
pyenv local 3.7.7
python -V ---> Python 3.7.7 #pyenv local 設定之後,pytho的版本也變成了3.7.7
cd ; python -V ---> Python 2.7.5
cd /home/python/projects/pro ; python -V ---> Python 3.7.7
##可以看到pyenv local設定僅僅隻對設定當時所在目錄有效,在其他目錄環境下無效。
mkdir /home/python/projects/web ; cd /home/python/projects/web ; pyenv local 3.6.9
python -V ----> Python 3.6.9
cd ; python -V ----> Python 2.7.5
cd /home/python/projects/pro/ ; python -V ----> Python 3.7.7
##看到沒,這個就可以很好的做到各個目錄python環境的隔離,以期在不同環境下開發部署不同項目。
Virtualenv 虛拟環境設定
為什麼要使用虛拟環境?
因為剛才使用的Python環境都是一個公共的空間,如果多個項目使用不同Python版本開發,或者使用不同的Python版本部署運作,或者使用相同版本開發的不同項目使用了不同版本的庫,等等這些問題都會帶來沖突。最好的解決辦法就是每一個項目獨立運作自己的“獨立小環境”中。
可使用插件,在plugins/pyenv-virtualenv中。指令格式:pyenv virtualenv 版本号 虛拟空間名稱
[[email protected] pro]$ pyenv virtualenv 3.6.9 w369
[[email protected] projects]$ pyenv virtualenv 3.7.7 wzstyle377
[[email protected] ~]$ pyenv virtualenv 3.6.9 style3-6-9
[[email protected] ~]$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.6.9
3.6.9/envs/style3-6-9
3.6.9/envs/w369
3.7.7
3.7.7/envs/wzstyle377
style3-6-9
w369
wzstyle377
#這個時候看到已經多出了好幾個虛拟版本,我們可以在不同目錄下指定pyenv local版本,以解決一些沖突問題。
例如:
[[email protected] pro]$ pwd
/home/python/projects/pro
[[email protected] pro]$ pyenv versions
* 3.7.7 (set by /home/python/projects/pro/.python-version)
[[email protected] pro]$ python -V
Python 3.7.7
[[email protected] pro]$ pyenv local style3-6-9
(style3-6-9) [[email protected] pro]$ python -V
Python 3.6.9
(style3-6-9) [[email protected] pro]$ pyenv versions
* style3-6-9 (set by /home/python/projects/pro/.python-version)
[[email protected] ~]$ cd ; python -V ; pyenv versions
Python 2.7.5
* system (set by /home/python/.pyenv/version)
#可看到,使用了pyenv local 仍然隻對pro目錄有效。設定local之後,在對應目錄下會産生一個version檔案:
cat /home/python/projects/pro/.python-version ---> style3-6-9 #這個檔案裡記錄了使用的版本
#我們可以基于安裝的3.6.9或者3.7.7使用virtualenv虛拟出多個不同的獨立的空間,進行不同項目的操作,避免沖突和幹擾。虛拟出來的獨立空間和虛拟時指定的版本号是同一版本。
#虛拟出來的空間的目錄在~/.pyenv/versions/下,以後隻要使用一個虛拟版本,包就會安裝到這些對應的目錄下去,而不是使用3.6.9或3.7.7。
ls /home/python/.pyenv/versions ---> 3.6.9 3.7.7 style3-6-9 w369 wzstyle377
pip 通用配置
pip 是Python的包管理工具,3.x的版本直接帶了,可直接使用。pip連接配接python官網使用速度較慢,為了使用國内鏡像,可以做以下操作:
mkdir ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF
配置完成之後,就可以使用阿裡雲下載下傳了:
cd /home/python/projects/pro ; pip install jupyter

可根據提示更新pip: pip install --upgrade pip
pip -V #檢視pip版本
#并且,我們是用local指定了/home/python/projects/pro目錄環情況下安裝的jupyter,可和他們目錄做對比:
(style3-6-9) [[email protected] pro]$ l. | cat .python-version -----> style3-6-9
(style3-6-9) [[email protected] pro]$ pip list #會列印出jupyter各種包
(w369) [[email protected] web]$ cd /home/python/projects/web | pip -V ; pip list ; l. |cat .python-version
在w369這個虛拟環境下看到pip版本是18.1,沒有關于jupyter的包,看到version檔案裡版本是w369;這就可以驗證,即使是通過3.6.9這個相同版本虛拟出來的不同的環境空間,是各自獨立,互不影響沖突的。
使用jupyter,在/home/python/projects/pro執行:jupyter notebook --ip=0.0.0.0(允許所有位址通路),程式啟動後會監聽8888端口,複制程式輸出的token在浏覽器進行通路:(jupyter隻在這個pro這個目錄中運作)
http://172.20.10.6:8888/?token=bebf93d571fff95a68e7dd1ec5a1ed8fc44c5bb71c51c4e7 #注意ip位址要改
導出包
虛拟環境的好處就在于和其他項目運作環境隔離。每一個獨立的環境都可以使用pip指令導出已經安裝的包,在另一個環境中安裝這些包。
建議一般開發用什麼版本,部署的時候用同樣的版本。
例如是在pycharm開發的項目,其版本環境可以在pycharm的Terminal中通過pip freeze來檢視已經安裝的包,通過pip freeze > requirements 導出名為requirements的檔案,這個檔案會自動出現在pycharm左邊Project中,我們可以檢視到它的在windows電腦中的路徑,并将其傳輸到需要的linux運作環境中,為了讓linux運作環境和開發環境相同,執行 pip install -r requirements 會将requirements檔案中的包全部下載下傳到目前linux運作環境,到達開發和運作部署環境一緻的目的。
個人部落格: https://www.wzstyle.cn/