python的虛擬環境:入門

2020-09-07 牛蟻

表的內容

  • 為什麼需要虛擬環境?
  • 什麼是虛擬環境?
  • 使用虛擬環境
  • 虛擬環境如何工作?
  • 使用virtualenvwrapper管理虛擬環境
  • 使用不同版本的Python

結論

在本文中,我們將向您展示如何使用虛擬環境為Python項目創建和管理單獨的環境,每個項目使用不同版本的Python執行。我們還將研究如何存儲和解析Python依賴項。

  • 更新的2018-01-12:明確pyenv vs. venv在Python 3.6+上的使用
  • 更新的2016-06-11:增加了關於使用virtualenv修改Python版本的部分

為什麼需要虛擬環境?

與大多數其他現代程式語言一樣,Python有自己獨特的下載、存儲和解析包(或模塊)的方式。雖然這有它的優點,但是在包存儲和解析方面做出了一些有趣的決定,這導致了一些問題——特別是關於如何存儲包以及在哪裡存儲包。

有幾個不同的位置可以在系統上安裝這些包。例如,大多數系統包存儲在sys.prefix中存儲的路徑的子目錄中。

在Mac OS X上,你可以很容易地找到sys的位置。前綴指向使用Python shell

import syssys.prefix&39;

與本文主題更相關的是,使用easy_install或pip安裝的第三方包通常放site.getsitepackages所指向的目錄之一中:

import site site.getsitepackages()[ &39;, &39;]

那麼,為什麼所有這些小細節都很重要呢?

了解這一點很重要,因為在默認情況下,系統上的每個項目都將使用這些相同的目錄來存儲和檢索站點包(第三方庫)。乍一看,這似乎不是什麼大問題,對於系統包(作為標準Python庫的一部分的包)來說也不是,但是對於站點包來說確實很重要。

考慮以下場景,其中您有兩個項目:ProjectA和ProjectB,它們都依賴於相同的庫ProjectC。當我們開始需要不同版本的ProjectC時,問題就變得很明顯了。例如,也許ProjectA需要v1.0.0,而ProjectB需要更新的v2.0.0。

這對於Python來說是一個真正的問題,因為它不能區分站點包目錄中的版本。所以v1.0.0和v2.0.0都位於相同的目錄中,名稱相同:

/System/Library/Frameworks/Python.framework/Versions/3.5/Extras/lib/python/ProjectC


因為項目是根據它們的名稱存儲的,所以版本之間沒有區別。因此,項目ProjectA和ProjectB都需要使用相同的版本,這在許多情況下是不可接受的。

這就是虛擬環境和virtualenv/venv工具發揮作用的地方。

{img2}
我整理了Python的相關學習視頻及學習路線圖。
需要資料的,私信【學習】獲取更多資料 或者
加我聯繫方式: 925916955

什麼是虛擬環境?

在其核心部分,Python虛擬環境的主要目的是為Python項目創建一個隔離的環境。這意味著每個項目都可以有自己的依賴項,而不管其他項目有什麼依賴項。

在上面的小示例中,我們只需要為ProjectA和ProjectB創建一個單獨的虛擬環境,就可以了。反過來,每個環境都能夠獨立於其他環境,依賴於它們選擇的ProjectC的任何版本。

這樣做的好處是,您可以擁有的環境數量沒有限制,因為它們只是包含一些腳本的目錄。另外,使用virtualenv或pyenv命令行工具很容易創建它們。

使用虛擬環境

首先,如果您不使用Python 3,那麼您將希望使用pip安裝virtualenv工具:

$ pip install virtualenv

如果使用Python 3,那麼應該已經安裝了標準庫中的venv模塊。

注意:從這裡開始,我們假設您使用的是更新的venv工具,因為它與virtualenv在實際命令方面沒有什麼區別。但實際上,它們是非常不同的工具。

從創建一個新的目錄開始:

$ mkdir python-virtual-environments && cd python-virtual-environments

在目錄中創建一個新的虛擬環境:

Python 3
$ python3 -m venv env


注意:默認情況下,這將不包括任何現有的站點包。

Python 3 venv方法的優點是迫使您選擇Python 3解釋器的特定版本,該版本應該用於創建虛擬環境。這就避免了

Python 3 venv方法的優點是迫使您選擇Python 3解釋器的特定版本,該版本應該用於創建虛擬環境。這避免了關於新環境所基於的Python安裝的任何混淆。

從Python 3.3到3.4,建議的創建虛擬環境的方法是使用pyvenv命令行工具,默認情況下,Python 3安裝中也包含這個工具。但在3.6及以上版本中,python -m venv才是正確的選擇。

在上面的例子中,這個命令創建了一個名為env的目錄,該目錄包含一個類似於如下的目錄結構:

├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── easy_install
│ ├── easy_install-3.5
│ ├── pip
│ ├── pip3
│ ├── pip3.5
│ ├── python -> python3.5
│ ├── python3 -> python3.5
│ └── python3.5 -> /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
├── include
├── lib
│ └── python3.5
│ └── site-packages
└── pyvenv.cfg

以下是每個文件夾包含的內容:

  • bin:與虛擬環境交互的文件
  • include:編譯Python包的C頭文件
  • lib: Python版本的副本,以及安裝每個依賴項的site-packages文件夾

此外,還有一些不同Python工具以及Python可執行文件本身的副本或符號連結。這些文件用於確保所有Python代碼和命令都在當前環境的上下文中執行,這就是如何實現與全局環境的隔離。我們將在下一節詳細解釋這一點。

更有趣的是bin目錄中的激活腳本。這些腳本用於設置shell以默認使用環境的Python可執行文件及其站點包。

為了單獨使用這個環境的包/資源,您需要「激活」它。要做到這一點,只需運行以下命令:

$ source env/bin/activate(env) $

注意您的提示符現在如何以您的環境名(在我們的示例中是env)作為前綴。這是env當前處於活動狀態的指示器,這意味著python可執行文件將只使用該環境的包和設置。

要顯示實際的包隔離,我們可以使用bcrypt模塊作為示例。假設我們在系統範圍內安裝了bcrypt,但是沒有在虛擬環境中安裝。

在我們測試這個之前,我們需要通過執行deactivate回到「系統」上下文:

(env) $ deactivate$

現在您的shell會話已經恢復正常,python命令引用了全局python安裝。當您使用特定的虛擬環境時,請記住這樣做。

現在,安裝bcrypt並使用它來散列密碼:

$ pip -q install bcrypt$ python -c &39;password&39;utf-8&34;$2b$12$vWa/VSvxxyQ9d.WGgVTdrell515Ctux36LCga8nM5QTW0.4w8TXXi

如果我們在激活虛擬環境時嘗試相同的命令,會發生以下情況:

$ source env/bin/activate(env) $ python -c &39;password&39;utf-8&34;Traceback (most recent call last): File &34;, line 1, in <module>ImportError: No module named &39;

如您所見,python -c「import bcrypt…」命令的行為在源env/bin/activate調用之後發生了變化。

在一個例子中,我們可以使用bcrypt,而在另一個例子中我們不能。這是我們希望通過虛擬環境實現的分離,現在很容易實現。

{img3}

虛擬環境如何工作?

「激活」一個環境到底意味著什麼?對於開發人員來說,了解底層的情況是非常重要的,特別是當您需要了解執行環境、依賴性解決方案等等時。

為了解釋這是如何工作的,讓我們首先查看不同python可執行程序的位置。當環境「停用」時,運行以下命令:

$ which python/usr/bin/python

現在,激活它,再次運行命令:

$ source env/bin/activate(env) $ which python/Users/michaelherman/python-virtual-environments/env/bin/python

在激活環境之後,我們現在為python可執行文件獲得了不同的路徑,因為在活動環境中,$ path環境變量稍微修改了一些。

注意$ path中第一個路徑在激活前後的區別:

$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$ source env/bin/activate(env) $ echo $PATH/Users/michaelherman/python-virtual-environments/env/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:

在後一個示例中,虛擬環境的bin目錄現在位於路徑的開頭。這意味著它是在命令行上運行可執行文件時搜索的第一個目錄。因此,shell使用我們的虛擬環境的Python實例,而不是系統範圍的版本。

{img4}

這就提出了以下問題:

  • 這兩個可執行文件有什麼不同?
  • 虛擬環境的Python可執行文件如何能夠使用系統站點包之外的其他東西?

這可以通過Python如何啟動以及它在系統中的位置來解釋。實際上,這兩個Python可執行文件之間沒有任何區別。重要的是它們的目錄位置。

當Python啟動時,它會查看二進位文件的路徑。在虛擬環境中,它實際上只是系統Python二進位文件的副本或符號連結。然後設置sys的位置。前綴和系統。基於這個位置的exec_prefix,省略了路徑的bin部分。

位於sys中的路徑。然後使用前綴通過搜索相對路徑庫/pythonX來定位站點包目錄。X /網站/ X。X是您正在使用的Python版本。

在我們的例子中,二進位文件位於/Users/michaelherman/python-virtual-environments/env/bin,即sys。前綴是/Users/michaelherman/python-virtual-environments/env,因此使用的站點包目錄是/Users/michaelherman/python-virtual-environments/env/lib/pythonX.X/site-packages。最後,該路徑存儲在sys中。路徑數組,其中包含包可以駐留的所有位置

使用virtualenvwrapper管理虛擬環境

雖然虛擬環境確實解決了包管理的一些大問題,但它們並不完美。在創建了一些環境之後,您將開始看到它們創建了一些自己的問題,其中大部分都圍繞著管理環境本身。為此,創建了virtualenvwrapper工具。它只是圍繞主要的virtualenv工具的一些包裝腳本

virtualenvwrapper的一些更有用的特性是:

  • 在一個位置組織所有虛擬環境
  • 提供幫助您輕鬆創建、刪除和複製環境的方法
  • 提供在環境之間切換的單個命令

雖然其中一些功能可能看起來很小或者不重要,但是您很快就會發現它們是添加到您的工作流中的重要工具。

首先,您可以使用pip下載包裝器:

$ pip install virtualenvwrapper

一旦安裝完畢,我們需要激活它的shell函數。我們可以通過在安裝的virtualenvwrapper上運行原始碼來實現這一點。sh腳本。當您第一次使用pip安裝它時,安裝的輸出將告訴您virtualenvwrap .sh的準確位置。或者您可以簡單地運行以下命令:

$ which virtualenvwrapper.sh/usr/local/bin/virtualenvwrapper.sh

使用該路徑,將以下三行添加到shell的啟動文件中。如果您正在使用Bash shell,您可以將這些行放在~/中。bashrc文件或~/。概要文件。對於其他shell,如zsh、csh或fish,您需要使用特定於該shell的啟動文件。重要的是,這些命令是在您登錄或打開新shell時執行的:

export WORKON_HOME=$HOME/.virtualenvs Optionalsource /usr/local/bin/virtualenvwrapper.sh

最後,重新加載啟動文件:

$ source ~/.bashrc

現在應該有一個位於$WORKON_HOME的目錄,其中包含所有的virtualenvwrapper數據/文件:

$ echo $WORKON_HOME/Users/michaelherman/.virtualenvs

您現在還可以使用shell命令來幫助管理環境。以下是一些可供選擇的方法:

  • workon
  • mkvirtualenv
  • cdvirtualenv
  • rmvirtualenv

有關命令、安裝和配置virtualenvwrapper的更多信息,請參閱文檔。

現在,任何時候你想開始一個新項目,你只需要這樣做:

$ mkvirtualenv my-new-project(my-new-project) $

這將在$WORKON_HOME目錄中創建並激活一個新環境,所有虛擬環境都存儲在該目錄中。

要停止使用該環境,您只需要像以前一樣停用它:

(my-new-project) $ deactivate$

如果您有許多環境可供選擇,您可以列出所有與workon功能:

$ workonmy-new-projectmy-django-projectweb-scraper

最後,這裡是如何激活:

$ workon web-scraper(web-scraper) $

如果您希望能夠使用單個工具並在Python版本之間切換,那麼virtualenv將允許您這樣做。virtualenv有一個參數-p,它允許您選擇要使用的Python版本。將它與which命令結合起來,我們就可以輕鬆地選擇您喜歡的Python版本,以便以一種簡單的方式使用。例如,假設我們想要Python 3作為我們的首選版本:

$ virtualenv -p $(which python3) blog_virtualenv

這將創建一個新的Python 3環境。

它是如何工作的?

用於在$PATH變量中查找給定命令並返回該命令的完整路徑的命令。因此,返回到python3的完整路逕到-p參數,該參數接受PYTHON_EXE。這也可以用於python2。只需將python3替換為python2(或者如果系統默認為python2,則使用python)。

現在您不必記住在哪裡安裝了環境。您可以按照自己的意願輕鬆地刪除或複製它們,而且您的項目目錄也不會那麼混亂!

{img5}

使用不同版本的Python

與舊的virtualenv工具不同,pyvenv不支持使用Python的任意版本創建環境,這意味著您必須為創建的所有環境使用Python 3的默認安裝。雖然您可以將環境升級到Python的最新系統版本(通過——upgrade選項),但如果環境發生了更改,您仍然不能實際指定特定的版本。

有很多方法可以安裝Python,但是很少有足夠簡單或足夠靈活的方法可以頻繁地卸載和重新安裝不同版本的二進位文件。

這就是pyenv上場的原因。

儘管名稱很相似(pyvenv vs pyenv),但pyenv不同之處在於它的重點是幫助您在系統級和項目級之間切換Python版本。pyvenv的目的是分離模塊,而pyenv的目的是分離Python版本。

你可以從安裝pyenv開始使用自製程序(在OS X上)或pyenv-installer項目:

Homebrew

$ brew install pyenv

pyenv-installer

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

一旦在系統上安裝了pyenv,下面是一些您可能感興趣的基本命令:

$ pyenv install 3.5.0 List installed versions$ pyenv exec python -V 39;python -V&39;Using version:', sys.version[:5])

它所做的就是列印出正在使用的Python可執行文件的版本號。使用pyenv和exec命令,我們可以使用已安裝的Python的任何不同版本運行腳本。

$ python main.pyUsing version: 2.7.5$ pyenv global 3.5.0$ pyenv exec python main.pyUsing version: 3.5.0$ pyenv local 2.7.11$ pyenv exec python main.pyUsing version: 2.7.11

注意pyenv是如何執行python main的。在默認情況下,py使用的是我們的「全局」Python版本,但是在為當前目錄設置了一個版本之後,它使用的是「本地」版本。

對於那些擁有許多不同版本需求的項目的開發人員來說,這是非常強大的。您不僅可以輕鬆更改所有項目的默認版本(通過全局),還可以覆蓋它來指定特殊情況。

結論

在本文中,您不僅了解了如何存儲和解析Python依賴項,還了解了如何使用不同的社區工具來幫助解決各種打包和版本控制問題。

正如您所看到的,多虧了龐大的Python社區,您可以使用許多工具來幫助解決這些常見問題。當您作為開發人員取得進展時,一定要花時間學習如何利用這些工具。您甚至可能發現它們的非預期用途,或者學習將類似的概念應用到您使用的其他語言中。


我整理了Python的相關學習視頻及學習路線圖。需要資料的,私信【學習】獲取更多資料 或者加我聯繫方式: 925916955 不知道怎麼學習的人,可以來問問我,也許能夠幫助你

{img6}

相關焦點

  • Python虛擬環境詳解
    這也就是本文所要介紹的虛擬環境(virtualenv/venv)所要解決的問題。什麼是虛擬環境?Python虛擬環境的主要目的是為了給不同的工程創建互相獨立的運行環境。在虛擬環境下,每一個工程都有自己的依賴包,而與其它的工程無關。不同的虛擬環境中同一個包可以有不同的版本。
  • python虛擬環境
    安裝:pip install virtualenvwrapper-win常用命令:mkvirtualenv envname 切換到某虛擬環境下pip list刪除虛擬環境deactivate 列出所有常見的虛擬環境mkvirtualenv --python==C:\...
  • sublime調用虛擬環境中的python
    sublime是一款輕量、啟動極快、插件庫豐富的代碼編輯器,我們在實際操作中可能需要將python安裝到虛擬環境中,這時我們如何用sublime調用虛擬環境中的python而不是全局環境中的python。下面教大家如何設置sublime來達到我們的目的。
  • Python虛擬環境的搭建(Windows篇)
    什麼是python的虛擬環境:所謂的python虛擬環境,我們可以類比虛擬機的概念,每一個python虛擬環境都包含基本的python庫,是能夠獨立運行的執行空間。在虛擬環境裡可以下載第三方包、創建項目、寫代碼等等。
  • Python全棧開發,如何使用Python的虛擬環境
    1.6 python虛擬環境1.6.1 為什麼需要虛擬環境一個Python項目的結構,如下圖:,而使用虛擬環境就可以輕鬆解決問題。虛擬環境通過創建一個全新的Python開發環境,從而實現不同項目間的隔離。
  • 如何設置python的虛擬環境
    我們在用 python創建web網站的時候可能會用到flask,而根據文檔建議是將flask安裝到虛擬環境中,這樣大家在不同項目或者不同版本的庫之間不會影響到原有項目。經過一段時間的研究小編整理了一下操作流程。
  • linux centos 部署python3+虛擬環境
    >>> exit()二、創建虛擬環境virtualenv是一個可以在同一計算機中隔離多個python版本的工具。有時,兩個不同的項目可能需要不同版本的python,如 python2.7 / python3.6 ,但是如果都裝到一起,經常會導致問題。
  • win10 下的python虛擬環境安裝使用
    安裝virtualenv(使用powershell)若要使用python虛擬環境進行開發,首先需要安裝我已經裝過了創建虛擬環境還有另外一種創建虛擬環境的命令,上面是默認的使用python3如果想使用指定的python版本創建虛擬環境 命令如下:virtualenv -p [python
  • 代碼詳解:Python虛擬環境的原理及使用
    插圖:Gustave DoréPython的虛擬環境極大地方便了人們的生活。本指南先介紹虛擬環境的基礎知識以及使用方法,然後再深入介紹虛擬環境背後的工作原理。注意:本指南在macOS Mojave系統上使用最新版本的Python 3.7.x。目錄· 為什麼使用虛擬環境?· 什麼是虛擬環境?
  • 如何使用virtualenv搭建Python虛擬環境
    yum安裝yum install python-virtualenv pip install virtualenv創建虛擬環境使用virtualenv命令創建虛擬環境的格式是:virtualenv [虛擬環境名]mkdir pyenv #創建虛擬環境倉庫cd pyenvvirtualenv --python /usr/local/python
  • pyenv虛擬環境管理python多版本和軟體庫
    答案是有的,pyenv自帶的插件pyenv-virtualenv,創建兩個虛擬環境,互相獨立,各不影響。版本[python@localhost ~]$ pyenv virtualenv 3.6.9 py3 //創建虛擬環境,3.6.9為python版本,py3為別名[python@localhost test]$ pyenv local 3.6.9 //進入目錄,設置或顯示本地python版本(本目錄有效)[python@localhost test]$ pyenv global system
  • python虛擬環境的安裝與使用(windows)
    有小夥伴私信,讓說一下最簡單虛擬環境用法。(第三方模塊沒必要,用python自帶模塊就行)我們一般python開發時,都是用虛擬環境來開發,以防止所用模塊版本有變化導致程序衝突。下面用python3自帶模塊,及其簡單的方式來說明一下虛擬環境的安裝與使用1、打開cmd程序,進入要創建虛擬環境的目錄 cd D:\flask_app> 我們要在這個目錄創建一個虛擬環境, 命名為 venv_02、cmd命令:D:\flask_app>python
  • Python虛擬環境的搭建(Linux篇)
    使用 virtualenv安裝 virtualenvpip3 install virtualenv創建虛擬環境(執行以下命令,將在當前目錄下創建「虛擬環境名稱" 的虛擬環境文件夾)virtualenv 虛擬環境名稱進入虛擬換cd 虛擬環境名稱source .
  • Python全棧開發,如何使用Python的虛擬環境
    1.6 python虛擬環境1.6.1 為什麼需要虛擬環境一個Python項目的結構,如下圖:虛擬環境通過創建一個全新的Python開發環境,從而實現不同項目間的隔離。,如果選中表明當前虛擬環境和物理機器對應版本公用一個site-packages, 如果希望當前的虛擬環境獨立,不需要選中此複選框。
  • Python虛擬開發環境,怎樣才能在系統中創建
    以下文章來源於python 青少年編程 ,作者python expert今天小編給大家普及一下如何在系統中創建一個虛擬的Python開發環境。別著急,解決這個問題有兩種方法:一種是利用pyenv切換你系統中已安裝的Python版本;另一種就是在本機上利用virtualenv安裝一個虛擬的python運行開發環境。本文中將介紹第二種。
  • Python 項目環境與依賴管理工具 Pipenv 入門
    在創建一個新項目時先使用 Virtualenv 創建一個虛擬運行環境,然後使用 Pip 安裝依賴,最後使用 pip freeze > requirements.txt 記錄項目依賴。從現有項目創建虛擬環境對於現有項目,可以區分為三種情況:沒有使用 pipenv使用 pipenv install -r path/to/requirements.txt --python 3.6 來安裝依賴。
  • 使用pipenv創建管理python虛擬環境
    因為系統中的環境可能被其他的軟體依賴,為了減少開發中依賴包的問題,使用pipenv虛擬環境。1.安裝 pipenvpip install pipenv2.創建項目目錄並創建python虛擬環境mkdir testproject && cd testproject# 創建基於python3的虛擬環境pipenv --pytho 3 3.在虛擬環境中安裝djangopipenv
  • 什麼是python虛擬環境?吃貨們都能懂的教程,走起
    Python的虛擬環境電腦系統:windows10Python 版本:3.8(注意:python2使用virtualen命令新建虛擬環境,和python3不同,本文用的是python3)我們安裝過python環境以後,系統會在path路徑下面生成一個python的使用環境路徑,這就是我們python的默認python環境
  • Python虛擬環境常用工具介紹
    因此也就催生了各式各樣的虛擬環境工具。本文將介紹一下常見的幾個用於創建和使用Python虛擬環境的工具,希望對大家有所幫助。Virtualenv這應該是最常見的一個虛擬環境工具了,同時支持Python 2和Python 3,出現的時間也比較早。
  • 「建議收藏」Python虛擬環境最全教程,看這篇就夠了!
    運行環境, 那麼我們只需要這麼做:創建虛擬環境virtualenv --no-site-packages ENV 執行這條命令會創建一個名為ENV的目錄, ENV 目錄下分別為bin, lib, pyvenv.cfgbin 目錄下是當前虛擬環境使用的Python解釋器lib 所有安裝的python庫都會放在這個目錄中的lib/pythonx.x