Python 的版本控制


版本控制工具的差異

這里介紹幾個工具:pyenv、pyvenv、 venv、virtualenv、pyenv-virtualenv

  1. virtualenv
    • 是針對python的包的多版本管理,通過將python包安裝到一個模塊來作為python的包虛擬環境,通過切換目錄來實現不同包環境間的切換。其實不是非常愛搗騰的話,此工具就已經可以應付同python版本多環境問題了,安裝使用也非常簡單
  2. virtualenvwrapper
    • 是一組對virtualenv的擴展(請參閱docs )。 它給你的命令像mkvirtualenv , lssitepackages ,特別是在不同的virtualenv目錄之間切換的工作。 如果您想要多個virtualenv目錄,此工具特別有用,由於我使用的pycharm來開發的,每個項目里面一個,所以這個對我來說沒啥用
  3. pyenv
    • 用於隔離Python版本,這樣可以來系統中隨意使用python版本,而不至於影響到線上環境
  4. pyenv-virtualenv
    • pyenv-virtualenv是與pyenv相同的作者pyenv的插件,可以方便地同時使用pyenv和virtualenv,如果是用vim進行開發的話,那么這個非常的方便,但是由於我使用的是pycharm開發,所以這里我並沒有使用.
  5. pyvenv
    • 是Python 3附帶的腳本但是 在Python 3.6中棄用 因為它有問題(更不用說令人困惑的名字)。在Python 3.6+中,確切的等價物是 python3 -m venv
  6. venv
    • 是Python 3附帶的一個包,您可以使用它運行 python3 -m venv (雖然由於某種原因,一些發行版將它分成一個單獨的發行版包,例如 python3-venv 在Ubuntu / Debian上)。它的用途與此類似virtualenv,並以非常類似的方式工作,但它不需要復制Python二進制文件(除了在Windows上)。如果你不需要支持Python 2可以嘗試.實際上我部分業務的部署是使用的這個模塊

pyenv: 便捷的 python 版本管理工具

由於 python 分為 python2 和 python3,它們各自又有許多版本可供選用,如果系統上同時安裝了多個 python,很容易遇到版本切換的問題:

輸入 python 命令的時候,如何快速准確的調出特定版本的 python 解釋器?

這實際上是一個關於 $PATH 環境變量的問題。當輸入 python 命令的時候,系統從左向右搜索 $PATH 環境變量中的各個路徑,並且運行第一個找到的程序。所以解決這個問題的關鍵是動態修改 $PATH 環境變量中儲存的 python 路徑,而 pyenv 通過 shell script 和 shims 技術實現了這一點。使用 pyenv 可以很方便的:

安裝版本

$ pyenv  install --list

使用版本號

$ pyenv install 2.7.6
$ pyenv install 3.6.1

python 安裝完成后需要運行

pyenv rehash

使用 pyenv 指定 python 非常方便,只需在某個目錄下執行命令:

$ pyenv local 3.6.1

則在該目錄下運行的 python 都是 3.6.1 版本。
要查看系統中安裝了哪些 python 版本,可以執行命令:

$ pyenv versions
  system
  2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.6.1 (set by /Users/yyuu/path/to/project/.python-version)

其中system代表系統自帶的版本,其余是通過 pyenv 安裝的版本,*號表示當前使用的版本。因此:

$ python --version
Python 3.6.1

同樣的,pip等工具都和 3.6.1 版本對應,使用pip安裝軟件包時也會安裝到 3.6.1 對應的目錄下。
以上是對 pyenv 的簡單介紹,詳細說明請參考官方文檔。

pyenv-virtualenv: 管理虛擬環境的插件

pyenv 解決的是同一個系統中不同版本的 python 並存的問題,而 pyenv-virtualenv 解決的是不同項目所依賴的軟件包之間可能產生沖突的問題。在實際使用 python 的過程中,很容易出現這樣的問題:

通過pip安裝軟件包 A 時安裝了 A 所依賴的軟件包 B;之后又通過pip安裝軟件包 C 時再次安裝了 B 並將之前的覆蓋,但是因為 C 和 A 所依賴的 B 版本不同,安裝完 C 后導致 A 無法運行。

pyenv-virtualenv 通過為每個項目設置獨立的虛擬環境(目錄)來解決上述問題。
由於 pyenv-virtualenv 是 pyenv 的一個插件,因此需要首先安裝 pyenv ,然后通過 git 或者 brew 安裝 pyenv-virtualenv。
使用 pyenv-virtualenv 創建虛擬環境:

$ pyenv virtualenv 3.6.1 my-virtual-env-3.6.1

將創建一個名為my-virtual-env-3.6.1的虛擬環境(目錄),並且將 python 3.6.1 對應的bin和lib復制到該環境中。當該虛擬環境被激活后,所有的 python 操作都只在該環境中進行,從而和其它 python 內容隔離。
pyenv-virtualenv 支持自動激活和退出虛擬環境。首先確保在 shell 配置文件中添加了

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

接着在需要使用虛擬環境的目錄(通常是項目目錄)中:建立一個.python-version的文本文件,將虛擬環境名稱(如my-virtual-env-3.6.1)寫在里面即可。之后每次進/出該目錄時,虛擬環境都將自動激活/退出。
也可以用命令手動激活和退出:

$ pyenv activate my-virtual-env-3.6.1
$ pyenv deactivate

查看所有虛擬環境、刪除虛擬環境等更多命令和其他使用細節,請參考官方文檔。

總結

pyenv 用來管理一個系統內多個不同版本的 python,常用命令包括:

pyenv install --list                            #列出可供安裝的 python 版本
pyenv install <version>                         #安裝指定版本的 python
pyenv local <version>                           #在當前目錄下設置 python 版本
pyenv versions                                  #列出系統中安裝的 python 版本
pyenv version                                   #顯示當前目錄下采用的 python 版本

pyenv-virtualenv 用來隔離各個項目的依賴文件,常用命令包括:

pyenv virtualenv [version] <venv-name>          #創建虛擬環境
pyenv activate <venv-name>                      #激活虛擬環境
pyenv deactivate                                #退出虛擬環境


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM