成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼詳解:Python虛擬環(huán)境的原理及使用

開發(fā) 后端 開發(fā)工具
Python的虛擬環(huán)境極大地方便了人們的生活。本指南先介紹虛擬環(huán)境的基礎知識以及使用方法,然后再深入介紹虛擬環(huán)境背后的工作原理。

[[269327]]

依附之門:“放棄進入這里的所有希望。”

插圖:Gustave Doré

Python的虛擬環(huán)境極大地方便了人們的生活。本指南先介紹虛擬環(huán)境的基礎知識以及使用方法,然后再深入介紹虛擬環(huán)境背后的工作原理。

注意:本指南在macOS Mojave系統(tǒng)上使用***版本的Python 3.7.x。

1. 為什么使用虛擬環(huán)境?

虛擬環(huán)境為一系列潛在問題提供簡單的解決方案,尤其是在以下幾個方面:

  • 允許不同的項目使用不同版本的程序包,從而解決依賴性問題。例如,可以將Project A v2.7用于Project X,并將Package A v1.3用于Project Y。
  • 通過捕獲需求文件中的所有包依賴項,使項目自包含且可重現(xiàn)。
  • 在沒有管理員權(quán)限的主機上安裝軟件包。
  • 只需要一個項目,無需在系統(tǒng)范圍內(nèi)安裝軟件包,就能保持全局site-packages /目錄整潔。

聽起來很方便,不是嗎?開始構(gòu)建更復雜的項目并與其他人協(xié)作時,虛擬環(huán)境的重要性會凸顯出來。很多數(shù)據(jù)科學家也需要熟悉虛擬環(huán)境中與多語言相關(guān)的Conda環(huán)境。

可按照先后次序來使用!

2. 什么是虛擬環(huán)境?

到底什么是虛擬環(huán)境?

虛擬環(huán)境是用于依賴項管理和項目隔離的Python工具,允許Python站點包(第三方庫)安裝在本地特定項目的隔離目錄中,而不是全局安裝(即作為系統(tǒng)范圍內(nèi)的Python的一部分)。

這聽起來不錯,但到底什么是虛擬環(huán)境呢?虛擬環(huán)境只是一個包含三個重要組件的目錄:

  • 安裝了第三方庫的site-packages /文件夾。
  • 系統(tǒng)上安裝的Python可執(zhí)行文件的symlink符號鏈接。
  • 確保執(zhí)行Python代碼的腳本使用在給定虛擬環(huán)境中安裝的Python解釋器和站點包。

***一點在于會發(fā)生一些意想不到的錯誤,稍后會講這一點,但現(xiàn)在先看看在實際中如何實際使用虛擬環(huán)境。

[[269328]]

但丁《神曲·地獄篇》第六章—維吉爾安撫Cerberus

插圖:Gustave Doré

3. 使用虛擬環(huán)境

(1) 創(chuàng)造虛擬環(huán)境

假設想要為正在處理的項目創(chuàng)建一個名為test-project/的虛擬環(huán)境,該項目具有以下目錄樹:

  1. test-project/ 
  2. ├── data         
  3. ├── deliver           # Final analysis, code, & presentations 
  4. ├── develop           # Notebooks for exploratory analysis 
  5. ├── src               # Scripts & local project modules 
  6. └── tests 

需要執(zhí)行venv模塊,它是Python標準庫的一部分。

  1. % cd test-project/ 
  2. % python3 -m venv venv/       # Creates an environment called venv/ 

注意:可使用不同的環(huán)境名稱替換“venv/”。

瞧!虛擬環(huán)境誕生了。現(xiàn)在項目變成:

  1. test-project/ 
  2. ├── data        
  3. ├── deliver      
  4. ├── develop      
  5. ├── src      
  6. ├── tests    
  7. └── venv                 # There it is! 

提醒:虛擬環(huán)境本身就是一個目錄。

唯一要做的事情是通過運行前面提到的腳本來“激活”環(huán)境。

  1. % source venv/bin/activate              
  2. (venv) %                               # Fancy new command prompt 

現(xiàn)在我們位于活動的虛擬環(huán)境中(由命令提示符指示,前綴為活動環(huán)境的名稱)。

我們會像往常一樣處理項目,確保項目與系統(tǒng)的其他部分完全隔離。在虛擬環(huán)境中,我們無法訪問系統(tǒng)范圍的站點包,并且無法在虛擬環(huán)境之外訪問安裝包。

完成項目工作時,可以通過以下代碼退出環(huán)境:

  1. (venv) % deactivate 
  2. %                                    # Old familiar command prompt 

(2) 安裝包

默認情況下,只在新環(huán)境中安裝pip和setuptools。

  1. (venv) % pip list                    # Inside an active environmentPackage    Version 
  2. ---------- ------- 
  3. pip        19.1.1 
  4. setuptools 40.8.0 

如果想要安裝第三方庫的特定版本,比如numpyv1.15.3,可像往常一樣使用pip。

  1. (venv) % pip install numpy==1.15.3 
  2. (venv) % pip listPackage    Version 
  3. ---------- ------- 
  4. numpy      1.15.3 
  5. pip        19.1.1 
  6. setuptools 40.8.0 

現(xiàn)在可在腳本或活動的Python shell中導入numpy。例如,假設項目包含以下幾行腳本tests / imports-test.py。

  1. #!/usr/bin/env python3 
  2. import numpy as np 

直接從命令行運行這個腳本時,可得到:

  1. (venv) % tests/imports-test.py            
  2. (venv) %                                 # Look, Ma, no errors! 

成功。腳本導入numpy沒有故障。

[[269329]]

但丁和Virgil穿過Styx河—但丁《神曲·地獄篇》第八章

插圖:Gustave Doré

4. 管理環(huán)境

(1) 需求文件

使我們的工作成果可被他人重新使用的最簡單方法是在項目的根目錄(頂層目錄)中加入一個需求文件。為此,需要運行pip freeze,以下列出已安裝的第三方軟件包及其版本號:

  1. (venv) % pip freeze 
  2. numpy==1.15.3 

并將輸出寫入文件,我們稱之為requirements.txt。

  1. (venv) % pip freeze > requirements.txt 

更新軟件包或安裝新軟件包時,都可使用相同的命令重寫需求文件。

現(xiàn)在,任何共享項目的人都可以使用requirements.txt文件,通過復制環(huán)境以在系統(tǒng)上運行項目。

(2) 復制環(huán)境

等等——究竟是怎么做到的?

想象一下,我們的隊友Sara從團隊的GitHub存儲庫中刪除了測試項目。在她的系統(tǒng)上,項目的目錄樹如下所示:

  1. test-project/ 
  2. ├── data         
  3. ├── deliver      
  4. ├── develop      
  5. ├── requirements.txt 
  6. ├── src    
  7. └── tests 

注意到有點不尋常的東西了嗎?是的,沒錯!沒有venv /文件夾。

我們已經(jīng)將它從團隊的GitHub存儲庫中刪除,因為它的存在可能會引起麻煩。

這就是使用requirements.txt文件對復制項目代碼至關(guān)重要的一個原因。

要在機器上運行測試項目,Sara需要做的就是在項目的根目錄中創(chuàng)建一個虛擬環(huán)境:

  1. Sara% cd test-project/ 
  2. Sara% python3 -m venv venv/ 

并使用pip install -r requirements.txt將項目的依賴項安裝在活動的虛擬環(huán)境中。

  1. Sara% source venv/bin/activate 
  2. (venv) Sara% pip install -r requirements.txt 
  3. Collecting numpy==1.15.3 (from -r i (line 1)) 
  4. Installing collected packages: numpy 
  5. Successfully installed numpy-1.15.3 

現(xiàn)在,Sara系統(tǒng)上的項目環(huán)境與我們的系統(tǒng)完全相同。很整潔,不是嗎?

(3) 故障排除

可惜事情并不總是按計劃進行,總會遇到一些問題。也許錯誤地更新了特定的站點包后發(fā)現(xiàn)自己處于Dependency Hell的第九級,無法運行單行項目代碼。也許它沒那么糟糕,可能你會發(fā)現(xiàn)自己竟處于第七級。

無論你發(fā)現(xiàn)自己處于何種程度,解決問題并再次看到希望的最簡單方法是重新創(chuàng)建項目的虛擬環(huán)境。

  1. % rm -r venv/                           # Nukes the old environment 
  2. % python3 -m venv venv/                 # Makes a blank new one 
  3. % pip install -r requirements.txt       # Re-installs  

大功告成,多虧了requirements.txt文件,又恢復了正常。然而另一個原因是始終要在項目中列入需求文件。

[[269330]]

但丁與冰中的叛徒對話——但丁《神曲·地獄篇》第32章

插圖:Gustave Doré

5. 虛擬環(huán)境如何做到這一點?

想了解更多有關(guān)虛擬環(huán)境的信息嗎?比如,活動環(huán)境如何使用正確的Python解釋程序并如何找到合適的第三方庫?

(1) echo $ PATH

這一切都歸結(jié)為PATH的價值,它告訴shell使用什么Python實例以及在哪里尋找網(wǎng)站包。在基礎shell中,PATH看起來或多或少是這樣表現(xiàn)的。

  1. % echo $PATH 
  2. /usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin 

調(diào)用Python解釋器或運行.py腳本時,shell會按順序搜索PATH中列出的目錄,直到遇到Python實例。要查看PATH首先找到的Python實例,請運行which python3。

  1. % which python3 
  2. /usr/local/bin/python3                 # Your output may differ 

通過站點模塊(這是Python標準庫的一部分)查找此Python實例查找站點包的位置也很容易。

  1. % python3                           # Activates a Python shell 
  2. >>> import site                       
  3. >>> site.getsitepackages()          # Points to site-packages folder['/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'] 

運行腳本venv / bin / activate修改PATH,以便shell在搜索系統(tǒng)的全局二進制文件之前搜索項目的本地二進制文件。

  1. % cd ~/test-project/ 
  2. % source venv/bin/activate 
  3. (ven) % echo $PATH~/test-project/venv/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin 

現(xiàn)在shell知道如何使用項目的本地Python實例:

  1. (venv) % which python3 
  2. ~/test-project/venv/bin/python3 

在哪里可以找到項目的本地站點包?

  1. (venv) % python3 
  2. >>> import site 
  3. >>> site.getsitepackages()['~/test-project/venv/lib/python3.7/site-packages']    # Ka-ching 

(2) 理智檢查

還記得以前的tests / imports-test.py腳本嗎?看起來是下面這樣:

  1. #!/usr/bin/env python3 
  2. import numpy as np  

我們能夠在活動環(huán)境中運行此腳本,不出現(xiàn)任何問題,是因為環(huán)境中的Python實例能夠訪問項目的本地站點包。

如果運行從項目的虛擬環(huán)境外部而來的相同腳本會發(fā)生什么?

  1. % tests/imports-test.py                # Look, no active environmentTraceback (most recent call last): 
  2.   File "tests/imports-test.py", line 3, in <module> 
  3.     import numpy as npModuleNotFoundError: No module named 'numpy' 

是的,出現(xiàn)了一個錯誤,但我們應該這樣做。如果我們不這樣做,那就意味著我們能夠從項目外部訪問項目的本地站點包,從而破壞了擁有虛擬環(huán)境的整個目的。出現(xiàn)錯誤的事實證明我們的項目與系統(tǒng)的其他部分完全隔離。

(3) 環(huán)境的目錄樹

有一件事可以幫助整理所有這些信息,即清楚地了解環(huán)境目錄樹的外觀。

  1. test-project/venv/               # Our environment's root directory 
  2. ├── bin 
  3. │   ├── activate                           # Scripts to activate 
  4. │   ├── activate.csh                       # our project's 
  5. │   ├── activate.fish                      # virtual environment. 
  6. │   ├── easy_install 
  7. │   ├── easy_install-3.7 
  8. │   ├── pip 
  9. │   ├── pip3 
  10. │   ├── pip3.7 
  11. │   ├── python -> /usr/local/bin/python    # Symlinks to system-wide 
  12. │   └── python3 -> python3.7               # Python instances. 
  13. ├── include 
  14. ├── lib 
  15. │   └── python3.7 
  16. │       └── site-packages              # Stores local site packages 
  17. └── pyvenv.cfg 

[[269331]]

但丁和維吉爾回到了人世間——但丁《神曲·地獄篇》第34章

插圖:Gustave Doré

責任編輯:趙寧寧 來源: 讀芯術(shù)
相關(guān)推薦

2021-03-04 20:46:32

virtualenvwPython虛擬環(huán)境

2009-12-29 10:50:47

2021-10-28 19:08:29

Python虛擬環(huán)境

2020-07-06 07:00:21

PyCharm虛擬環(huán)境

2021-11-15 05:44:16

Python虛擬環(huán)境開發(fā)

2024-12-31 08:00:32

2024-05-28 09:26:42

2021-08-13 08:42:48

Python 編程技巧poetry

2023-05-05 16:37:13

CPU 性能虛擬環(huán)境虛擬化

2009-02-02 15:07:54

服務器虛擬化VMware

2021-07-05 06:51:42

Python虛擬環(huán)境

2010-11-30 16:26:38

2019-07-11 16:20:22

MacOSPython

2021-07-30 20:25:04

pipxPython編程語言

2013-01-05 15:49:25

數(shù)據(jù)保護虛擬化

2021-03-01 08:00:00

Linux開發(fā)虛擬環(huán)境

2020-05-22 08:52:08

LinuxPython工具

2013-10-11 16:47:38

2011-08-22 13:56:09

Linux虛擬

2021-09-18 08:00:00

Python系統(tǒng)開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧洲精品一区 | 91在线成人 | 亚洲美女网站 | 狠狠干影院| 一区二区三区在线免费 | 在线视频a| 国产欧美日韩一区二区三区在线观看 | 欧美日韩在线高清 | 精品一区二区久久久久久久网站 | 国产一区精品 | 91资源在线观看 | 四虎成人精品永久免费av九九 | 亚洲精品一区中文字幕乱码 | 在线视频 中文字幕 | 91视频在线看 | 国产女人精品视频 | 国产欧美一区二区三区久久人妖 | 日本 欧美 国产 | 久草视频观看 | 九九热在线精品视频 | 久久久久久成人 | 精品国产乱码 | 羞羞视频在线观看 | 亚洲视频免费观看 | 日韩不卡一区二区三区 | 欧美精品日韩精品国产精品 | 日本精品在线播放 | 亚洲欧美国产毛片在线 | 国产在线一区观看 | 精品久久久久久久 | 日韩免费一区 | 黄久久久 | 一区二区三区在线观看免费视频 | 久久精品国产99国产精品 | 伊人一区 | 午夜亚洲 | 亚洲一一在线 | 久久久久久久国产精品视频 | 免费a级毛片在线播放 | 成人精品福利 | 久久久久99 |