天天看點

python 版本管理工具 pyenv

個人部落格:   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

注意:

  1. 在 https://github.com/pyenv/pyenv-installer 有安裝文檔
  2. 如果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

python 版本管理工具 pyenv

可根據提示更新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/