Python学习笔记:虚拟环境和包
本文來自:入門指南
開胃菜參考:開胃菜
使用Python解釋器:使用Python解釋器
本文對(duì)Python的簡介:Python 簡介
Python流程介紹:深入Python 流程
Python數(shù)據(jù)結(jié)構(gòu):Python 數(shù)據(jù)結(jié)構(gòu)
Python:模塊:Python 模塊
Python:輸入和輸出Python 輸入和輸出
Python:錯(cuò)誤和異常Python 錯(cuò)誤和異常
Python:類Python:類
Python:標(biāo)準(zhǔn)庫預(yù)覽Python:標(biāo)準(zhǔn)庫預(yù)覽
Python:標(biāo)準(zhǔn)庫預(yù)覽2Python:標(biāo)準(zhǔn)庫預(yù)覽2
#12. 虛擬環(huán)境和包
##12.1. 簡介
Python 應(yīng)用程序經(jīng)常會(huì)使用一些不屬于標(biāo)準(zhǔn)庫的包和模塊。應(yīng)用程序有時(shí)候需要某個(gè)特定版本的庫,因?yàn)樗枰粋€(gè)特定的 bug 已得到修復(fù)的庫或者它是使用了一個(gè)過時(shí)版本的庫的接口編寫的。
這就意味著可能無法安裝一個(gè) Python 來滿足每個(gè)應(yīng)用程序的要求。如果應(yīng)用程序 A 需要一個(gè)特定模塊的 1.0 版本但是應(yīng)用程序 B 需要該模塊的 2.0 版本,這兩個(gè)應(yīng)用程序的要求是沖突的,安裝版本 1.0 或者版本 2.0 將會(huì)導(dǎo)致其中一個(gè)應(yīng)用程序不能運(yùn)行。
這個(gè)問題的解決方案就是創(chuàng)建一個(gè) 虛擬環(huán)境 (通常簡稱為 “virtualenv”),包含一個(gè)特定版本的 Python,以及一些附加的包的獨(dú)立的目錄樹。
不同的應(yīng)用程序可以使用不同的虛擬環(huán)境。為了解決前面例子中的沖突,應(yīng)用程序 A 可以有自己的虛擬環(huán)境,其中安裝了特定模塊的 1.0 版本。而應(yīng)用程序 B 擁有另外一個(gè)安裝了特定模塊 2.0 版本的虛擬環(huán)境。如果應(yīng)用程序 B 需求一個(gè)庫升級(jí)到 3.0 的話,這也不會(huì)影響到應(yīng)用程序 A 的環(huán)境。
12.2. 創(chuàng)建虛擬環(huán)境
用于創(chuàng)建和管理虛擬環(huán)境的腳本叫做 pyvenv。pyvenv 通常會(huì)安裝你可用的 Python 中最新的版本。這個(gè)腳本也能指定安裝一個(gè)特定的版本的 Python,因此如果在你的系統(tǒng)中有多個(gè)版本的 Python 的話,你可以運(yùn)行 pyvenv-3.5 或者你想要的任何版本來選擇一個(gè)指定的 Python 版本。
要?jiǎng)?chuàng)建一個(gè) virtualenv,首先決定一個(gè)你想要存放的目錄接著運(yùn)行 pyvenv 后面攜帶著目錄名:
pyvenv tutorial-env如果目錄不存在的話,這將會(huì)創(chuàng)建一個(gè) tutorial-env 目錄,并且也在目錄里面創(chuàng)建一個(gè)包含 Python 解釋器,標(biāo)準(zhǔn)庫,以及各種配套文件的 Python “副本”。
一旦你已經(jīng)創(chuàng)建了一個(gè)虛擬環(huán)境,你必須激活它。
在 Windows 上,運(yùn)行:
tutorial-env/Scripts/activate在 Unix 或者 MacOS 上,運(yùn)行:
source tutorial-env/bin/activate(這個(gè)腳本是用 bash shell 編寫的。如果你使用 csh 或者 fish shell,你應(yīng)該使用 activate.csh 和 activate.fish 來替代。)
激活了虛擬環(huán)境會(huì)改變你的 shell 提示符,顯示你正在使用的虛擬環(huán)境,并且修改了環(huán)境以致運(yùn)行 python 將會(huì)讓你得到了特定的 Python 版本。例如:
-> source ~/envs/tutorial-env/bin/activate (tutorial-env) -> python Python 3.5.2+ (3.4:c7b9645a6f35+, May 22 2015, 09:31:25)... >>> import sys >>> sys.path ['', '/usr/local/lib/python35.zip', ..., '~/envs/tutorial-env/lib/python3.5/site-packages'] >>>##12.3. 使用 pip 管理包
一旦你激活了一個(gè)虛擬環(huán)境,可以使用一個(gè)叫做 pip 程序來安裝,升級(jí)以及刪除包。默認(rèn)情況下 pip 將會(huì)從 Python Package Index,https://pypi.python.org/pypi, 中安裝包。你可以通過 web 瀏覽器瀏覽它們,或者你也能使用 pip 有限的搜索功能:
(tutorial-env) -> pip search astronomy skyfield - Elegant astronomy for Python gary - Galactic astronomy and gravitational dynamics. novas - The United States Naval Observatory NOVAS astronomy library astroobs - Provides astronomy ephemeris to plan telescope observations PyAstronomy - A collection of astronomy related tools for Python.pip 有許多子命令:“搜索”,“安裝”,“卸載”,“freeze”(譯者注:這個(gè)詞語暫時(shí)沒有合適的詞語來翻譯),等等。(請(qǐng)參考 installing-index 指南獲取 pip 更多完整的文檔。)
你可以安裝一個(gè)包最新的版本,通過指定包的名稱:
-> pip install novas Collecting novasDownloading novas-3.1.1.3.tar.gz (136kB) Installing collected packages: novasRunning setup.py install for novas Successfully installed novas-3.1.1.3你也能安裝一個(gè)指定版本的包,通過給出包名后面緊跟著 == 和版本號(hào):
-> pip install requests==2.6.0 Collecting requests==2.6.0Using cached requests-2.6.0-py2.py3-none-any.whl Installing collected packages: requests Successfully installed requests-2.6.0如果你重新運(yùn)行命令(pip install requests==2.6.0),pip 會(huì)注意到要求的版本已經(jīng)安裝,不會(huì)去做任何事情。你也可以提供一個(gè)不同的版本號(hào)來安裝,或者運(yùn)行 pip install --upgrade 來升級(jí)包到最新版本:
-> pip install --upgrade requests Collecting requests Installing collected packages: requestsFound existing installation: requests 2.6.0Uninstalling requests-2.6.0:Successfully uninstalled requests-2.6.0 Successfully installed requests-2.7.0pip uninstall 后跟一個(gè)或者多個(gè)包名將會(huì)從虛擬環(huán)境中移除這些包。
pip show 將會(huì)顯示一個(gè)指定的包的信息:
(tutorial-env) -> pip show requests --- Metadata-Version: 2.0 Name: requests Version: 2.7.0 Summary: Python HTTP for Humans. Home-page: http://python-requests.org Author: Kenneth Reitz Author-email: me@kennethreitz.com License: Apache 2.0 Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages Requires:pip list 將會(huì)列出所有安裝在虛擬環(huán)境中的包:
(tutorial-env) -> pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) requests (2.7.0) setuptools (16.0)pip freeze 將會(huì)生成一個(gè)類似需要安裝的包的列表,但是輸出采用了 pip install 期望的格式。常見的做法就是把它們放在一個(gè) requirements.txt 文件:
(tutorial-env) -> pip freeze > requirements.txt (tutorial-env) -> cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0requirements.txt 能夠被提交到版本控制中并且作為一個(gè)應(yīng)用程序的一部分。用戶們可以使用 install -r 安裝所有必須的包:
-> pip install -r requirements.txt Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))... Collecting numpy==1.9.2 (from -r requirements.txt (line 2))... Collecting requests==2.7.0 (from -r requirements.txt (line 3))... Installing collected packages: novas, numpy, requestsRunning setup.py install for novas Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0pip 還有更多的選項(xiàng)。請(qǐng)參考 installing-index 指南獲取關(guān)于 pip 完整的文檔。當(dāng)你編寫一個(gè)包并且在 Python Package Index 中也出現(xiàn)的話,請(qǐng)參考 distributing-index 指南。
總結(jié)
以上是生活随笔為你收集整理的Python学习笔记:虚拟环境和包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习导论(张志华):随机向量性质
- 下一篇: python 简单trace 过滤处理