第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Flask 框架教程 Flask 框架教程 虛擬開發(fā)環(huán)境搭建

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

本節(jié)講解了什么是虛擬開發(fā)環(huán)境以及虛擬開發(fā)環(huán)境的功能,它用于解決版本依賴的問題,講解了如何使用 virtualenv 命令創(chuàng)建、激活一個虛擬開發(fā)環(huán)境。

1. 什么是虛擬開發(fā)環(huán)境

虛擬開發(fā)環(huán)境是一個隔離的運行環(huán)境,每個運行環(huán)境中包含有一套獨立的組件:Python 解釋器、各種第三方包。每個運行環(huán)境中包含的組件是私有的、不共享的,因此運行環(huán)境之間是隔離的。

使用 Python 開發(fā)一個項目,需要安裝各種第三方包,項目有可能依賴特定版本的第三方包。例如,項目 A 依賴 3.5.3 版本的 redis 包,而項目 B 依賴 3.0.0 版本的 redis 包。通過為項目 A 和項目 B 分別設置一個虛擬開發(fā)環(huán)境,項目 A 的虛擬開發(fā)環(huán)境中包含 3.5.3 版本的 redis 包,項目 B 的虛擬開發(fā)環(huán)境中包含 3.0.0 版本的 redis 包,從而解決了第三方包的版本依賴問題。

2. 不同版本的包帶來的問題

2.1 不同版本的包

默認情況下,使用 pip3 安裝包時,會安裝包的最新版本,例如:

$ sudo pip3 install redis
Collecting redis
  Downloading redis-3.5.3-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 72 kB 126 kB/s
Installing collected packages: redis
Successfully installed redis-3.5.3

可以看到使用 pip 安裝 redis 包會默認安裝最新的 3.5.3 版本。

但某些情況下,出于兼容性的考慮,程序只能使用特定版本的 redis 包,需要使用 pip3 安裝包的特定版本,例如:

$ sudo pip3 install redis==3.0.0
Collecting redis==3.0.0
  Downloading redis-3.0.0-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 137 kB/s
Installing collected packages: redis
Successfully installed redis-3.0.0

指定選項 redis==3.0.0,會安裝 redis 3.0.0 版本。

2.2 帶來的問題

因為應用程序可能依賴特定版本的包,當系統(tǒng)中存在多個項目時,可能會出現(xiàn)沖突。例如:

  • 有兩個項目:項目 A 和 項目 B;
  • 項目 A 依賴于 redis-3.5.3;
  • 項目 B 依賴于 redis-3.0.0。

如果,需要同時進行兩個項目的開發(fā),則必須:

  • 開發(fā)項目 A 時,卸載系統(tǒng)中現(xiàn)有的 redis 包,安裝 redis-3.5.3;
  • 開發(fā)項目 B 時,卸載系統(tǒng)中現(xiàn)有的 redis 包,安裝 redis-3.0.0。

在兩個項目之間切換時,用戶需要頻繁的安裝和卸載 redis 包,顯然是很不合理的。

那么,這種不合理應該如何解決呢?

在 Python 開發(fā)中有個神器叫做 virtual 就是專門用來解決問題的,下面我們就來看下 virtual 這個神器到底神在哪里?

3. 使用 virtual 解決沖突

上面我們說到,不同的項目依賴不同的包很有可能造成項目沖突問題,而 virtual 則正是為了解決這個問題而誕生的:

virtualenv 命令可以創(chuàng)建一個隔離的運行環(huán)境:

  • 每個運行環(huán)境中包含有一套組件:Python 解釋器、各種第三方包;
  • 每個運行環(huán)境中包含的組件是私有的、不共享的;
  • 因此運行環(huán)境之間是隔離的。

針對 2.2 小節(jié)中項目依賴的問題,使用 virtualenv 的解決方法如下圖所示:

圖片描述

使用 virtualenv 為項目 A 創(chuàng)建一個隔離環(huán)境,隔離環(huán)境中包括 python 解釋器和 redis-3.5.3。使用 virtualenv 為項目 B 創(chuàng)建一個隔離環(huán)境,隔離環(huán)境中包括 python 解釋器和 redis-3.0.0。

如果,需要同時進行兩個項目的開發(fā),則開發(fā)項目 A 時,進入項目 A 的虛擬環(huán)境,開發(fā)項目 B 時,進入項目 B 的虛擬環(huán)境,也可以同時打開兩個終端,分別進行項目 A 和項目 B 的虛擬環(huán)境,同時進行兩者的項目開發(fā)。每一個虛擬環(huán)境中的 Python 版本,包版本互不影響,自然完美解決了沖突問題。

4. virtualenv 的使用

既然知道了有 virtualenv 這個神器,那么我們就要把它用在我們的實際開發(fā)中去,下面我們就演示一下 virtualenv 如何使用:

4.1 安裝 virtualenv

在 linux 下,使用 apt 命令安裝 virtualenv:

$ sudo apt install virtualenv

或者,使用 pip3 命令安裝 virtualenv:

$ sudo pip3 install virtualenv

4.2 安裝一個純凈的虛擬環(huán)境

假設用戶是 guest,當前目錄是 /home/guest:

$ pwd
/home/guest

現(xiàn)在希望創(chuàng)建一個虛擬環(huán)境 pure,將虛擬環(huán)境的 python 和第三方包存放在 /home/guest/pure 目錄下:

$ virtualenv -p python3 --no-site-packages pure
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/guest/pure/bin/python3
Also creating executable in /home/guest/pure/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

選項 -p python3,表示 Python 有兩個版本 python2 和 python3,指定虛擬環(huán)境中的 python 版本為 python3;選項 --no-site-packages,表示不安裝任何所第三方包,得到了一個不帶任何第三方包的 “純凈” 的 Python 運行環(huán)境。選項 pure,表示將虛擬環(huán)境的 python 和第三方包存放在 pure 目錄下,注意,創(chuàng)建虛擬環(huán)境后,不可以再移動虛擬環(huán)境目錄 pure 的位置。

4.3 虛擬環(huán)境 pure 的內(nèi)容

使用 virtualenv 命令創(chuàng)建虛擬環(huán)境,創(chuàng)建的目錄 pure 中的內(nèi)容如下:

圖片描述

目錄 pure 中包含的文件功能如下表所示:

文件名 功能
bin 存放 python3、pip3 等程序
lib 存放第三方庫
bin/activate 進入虛擬環(huán)境的腳本

4.4 進入虛擬環(huán)境

$ source pure/bin/activate
  • bin/activate 是進行虛擬化環(huán)境的腳本;
  • 使用 source 命令執(zhí)行 bin/activate 腳本。

bin/activate 執(zhí)行成功后,shell 的命令提示符變?yōu)椋?/p>

(pure) $
  • 原先的提示符是 $,現(xiàn)在是(pure) $;
  • 提示用戶現(xiàn)在處于 pure 環(huán)境中,此時輸入 python3;
  • 執(zhí)行的 python3 命令是 pure/bin/python3;
  • 而不是系統(tǒng)的 /usr/bin/python3 。

4.5 在虛擬環(huán)境中安裝指定版本的包

在 pure 環(huán)境中,安裝指定版本的 redis:

(pure) $ pip3 install redis==3.0.0
Collecting redis==3.0.0
  Downloading redis-3.0.0-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 137 kB/s
Installing collected packages: redis
Successfully installed redis-3.0.0

版本為 3.0.0 的 redis 會被安裝到 pure 目錄下:

(pure) $ ls pure/lib/python3.6/site-packages
easy_install.py       pkg_resources-0.0.0.dist-info  setuptools
pip                   __pycache__                    setuptools-49.2.0.dist-info
pip-20.1.1.dist-info  redis                          wheel
pkg_resources         redis-3.0.0.dist-info          wheel-0.34.2.dist-info

在 pure 環(huán)境下所有的第三方包被安裝到 pure/lib/python3.6/site-packages 目錄中去,目錄 redis-3.0.0.dist-info 表示當前安裝在 pure 環(huán)境中的 redis 的版本是 3.0.0。

4.6 退出虛擬環(huán)境

在虛擬環(huán)境中,執(zhí)行 deactivate,會退出虛擬環(huán)境:

(pure) $ deactivate

bin/deactivate 執(zhí)行成功后,shell 的命令提示符變?yōu)椋?/p>

$
  • 原先的提示符是 (pure) $,現(xiàn)在是 $;
  • 提示用戶現(xiàn)在處于系統(tǒng)環(huán)境中,此時輸入 python3;
  • 執(zhí)行的 python3 命令是系統(tǒng)的 /usr/bin/python3;
  • 而不是 pure/bin/python3。

5. 小結(jié)

本節(jié)講解了什么是虛擬開發(fā)環(huán)境以及虛擬開發(fā)環(huán)境的功能,使用思維導圖總結(jié)如下:

圖片描述