欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2019年07月02日 10:15:37   作者:讀芯術(shù)  
這篇文章主要介紹了Python虛擬環(huán)境的原理及使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

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

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

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

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

可按照先后次序來使用!

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

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

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

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

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

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

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

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

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

test-project/ 
├── data     
├── deliver      # Final analysis, code, & presentations 
├── develop      # Notebooks for exploratory analysis 
├── src        # Scripts & local project modules 
└── tests 

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

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

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

瞧!虛擬環(huán)境誕生了?,F(xiàn)在項(xiàng)目變成:

test-project/ 
├── data    
├── deliver   
├── develop   
├── src   
├── tests  
└── venv         # There it is! 

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

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

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

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

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

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

(venv) % deactivate 
%                  # Old familiar command prompt 

(2) 安裝包

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

(venv) % pip list          # Inside an active environmentPackage  Version 
---------- ------- 
pip    19.1.1 
setuptools 40.8.0 

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

(venv) % pip install numpy==1.15.3 
(venv) % pip listPackage  Version 
---------- ------- 
numpy   1.15.3 
pip    19.1.1 
setuptools 40.8.0 

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

#!/usr/bin/env python3 
import numpy as np 

直接從命令行運(yùn)行這個(gè)腳本時(shí),可得到:

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

成功。腳本導(dǎo)入numpy沒有故障。

4. 管理環(huán)境

(1) 需求文件

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

(venv) % pip freeze 
numpy==1.15.3 

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

(venv) % pip freeze > requirements.txt 

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

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

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

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

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

test-project/ 
├── data     
├── deliver   
├── develop   
├── requirements.txt 
├── src  
└── tests 

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

我們已經(jīng)將它從團(tuán)隊(duì)的GitHub存儲庫中刪除,因?yàn)樗拇嬖诳赡軙鹇闊?/p>

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

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

Sara% cd test-project/ 
Sara% python3 -m venv venv/ 

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

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

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

(3) 故障排除

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

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

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

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

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

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

(1) echo $ PATH

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

% echo $PATH 
/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin 

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

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

通過站點(diǎn)模塊(這是Python標(biāo)準(zhǔn)庫的一部分)查找此Python實(shí)例查找站點(diǎn)包的位置也很容易。

% python3              # Activates a Python shell 
>>> import site            
>>> 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'] 

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

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

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

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

在哪里可以找到項(xiàng)目的本地站點(diǎn)包?

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

(2) 理智檢查

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

#!/usr/bin/env python3 
import numpy as np 

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

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

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

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

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

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

test-project/venv/        # Our environment's root directory 
├── bin 
│  ├── activate              # Scripts to activate 
│  ├── activate.csh            # our project's 
│  ├── activate.fish           # virtual environment. 
│  ├── easy_install 
│  ├── easy_install-3.7 
│  ├── pip 
│  ├── pip3 
│  ├── pip3.7 
│  ├── python -> /usr/local/bin/python  # Symlinks to system-wide 
│  └── python3 -> python3.7        # Python instances. 
├── include 
├── lib 
│  └── python3.7 
│    └── site-packages       # Stores local site packages 
└── pyvenv.cfg 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python 使用Numpy對矩陣進(jìn)行轉(zhuǎn)置的方法

    Python 使用Numpy對矩陣進(jìn)行轉(zhuǎn)置的方法

    今天小編就為大家分享一篇Python 使用Numpy對矩陣進(jìn)行轉(zhuǎn)置的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 使用BeautifulSoup4解析XML的方法小結(jié)

    使用BeautifulSoup4解析XML的方法小結(jié)

    這篇文章主要介紹了使用BeautifulSoup4解析XML的方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Python入門_淺談for循環(huán)、while循環(huán)

    Python入門_淺談for循環(huán)、while循環(huán)

    下面小編就為大家?guī)硪黄狿ython入門_淺談for循環(huán)、while循環(huán)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 利用python制作俄羅斯方塊詳細(xì)圖文教程

    利用python制作俄羅斯方塊詳細(xì)圖文教程

    俄羅斯方塊是一款經(jīng)典的游戲,它可以用多種編程語言來實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于利用python制作俄羅斯方塊的詳細(xì)圖文教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • pycharm查看之前的運(yùn)行結(jié)果詳細(xì)步驟

    pycharm查看之前的運(yùn)行結(jié)果詳細(xì)步驟

    在工作場景下,程序員如何運(yùn)用PyCharm去書寫代碼以及運(yùn)行文件,還有學(xué)會對各種突發(fā)情況的應(yīng)對,這篇文章主要給大家介紹了關(guān)于pycharm查看之前的運(yùn)行結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Python中的rjust()方法使用詳解

    Python中的rjust()方法使用詳解

    這篇文章主要介紹了Python中的rjust()方法使用詳解,是Python學(xué)習(xí)入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • python selenium實(shí)現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

    python selenium實(shí)現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取

    這篇文章主要介紹了python selenium實(shí)現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取,需要的朋友可以參考下
    2021-04-04
  • 怎么快速自學(xué)python

    怎么快速自學(xué)python

    在本篇文章里小編給大家分享的是一篇關(guān)于怎么快速自學(xué)python的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-06-06
  • Python OrderedDict字典排序方法詳解

    Python OrderedDict字典排序方法詳解

    這篇文章主要介紹了Python OrderedDict字典使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • mac下如何將python2.7改為python3

    mac下如何將python2.7改為python3

    這篇文章主要介紹了mac下如何將python2.7改為python3,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07

最新評論