本教程將引導(dǎo)你完成安裝和使用 Python 包。
它將向你展示如何安裝和使用必要的工具,并就最佳做法做出強(qiáng)烈推薦。請記住, Python 用于許多不同的目的。準(zhǔn)確地說,你希望如何管理依賴項(xiàng)可能會根據(jù) 你如何決定發(fā)布軟件而發(fā)生變化。這里提供的指導(dǎo)最直接適用于網(wǎng)絡(luò)服務(wù) (包括 Web 應(yīng)用程序)的開發(fā)和部署,但也非常適合管理任意項(xiàng)目的開發(fā)和測試環(huán)境。
注解
確保你已經(jīng)有了 Python 和 pip
在您進(jìn)一步之前,請確保您有 Python,并且可從您的命令行中獲得。 你可以通過簡單地運(yùn)行以下命令來檢查:
安裝 Pipenv
Pipenv 是 Python 項(xiàng)目的依賴管理器。如果您熟悉 Node.js 的 npm 或 Ruby 的 bundler,那么它們在思路上與這些工具類似。盡管 pip可以安裝Python包, 但仍推薦使用 Pipenv,因?yàn)樗且环N更高級的工具,可簡化依賴關(guān)系管理的常見使用情況。
使用 pip 來安裝 Pipenv:
pip install --user pipenv
這進(jìn)行了 用戶安裝,以防止破壞任何系統(tǒng)范圍的包。如果安裝后, shell 中沒有 pipenv,則需要將 用戶基礎(chǔ)目錄 的 bin 目錄添加到 PATH 中。您可以通過運(yùn)行 python -m site 找到用戶庫,它將打印包括用戶基礎(chǔ)的站點(diǎn)信息。例如,在 Linux 上, 這將返回 USER_BASE: '~/.local',所以你需要在 PATH 中添加 ~/.local/bin。 在 Linux 和 MacOS 上,您可以通過 修改 ~/.profile 永久地設(shè)置 PATH。 在 Windows 上,您可以在 控制面板 中永久設(shè)置用戶的 PATH。
如果安裝完pipenv之后沒有添加環(huán)境變量就會出現(xiàn)command not found,添加環(huán)境變量如下
vi .profile
在最后一行添加如下代碼:
export PATH=$PATH:~/.local/bin
保存退出,運(yùn)行以下命令使這個文件生效
source .profile
接下來為你的項(xiàng)目安裝包
Pipenv 管理每個項(xiàng)目的依賴關(guān)系。要安裝軟件包時(shí),請更改到您的項(xiàng)目目錄(或只是本教程中的 一個空目錄)并運(yùn)行:
mkdir pipenv
cd pipenv
pipenv install requests
Pipenv 將在您的項(xiàng)目目錄中安裝超贊的 Requests 庫并為您創(chuàng)建一個 Pipfile。 Pipfile 用于跟蹤您的項(xiàng)目中需要重新安裝的依賴,例如在與他人共享項(xiàng)目時(shí)。 你應(yīng)該得到類似的輸出(盡管顯示的確切路徑會有所不同):
Creating a virtualenv for this project…
?New python executable in /root/.local/share/virtualenvs/pipenv-EMLcMOpm/bin/python
Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
Installing setuptools, pip, wheel...done.
Virtualenv location: /root/.local/share/virtualenvs/pipenv-EMLcMOpm
Creating a Pipfile for this project… Installing requests…
Collecting requests
Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
Collecting certifi>=2017.4.17 (from requests)
Downloading certifi-2017.11.5-py2.py3-none-any.whl (330kB)
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
Collecting idna<2.7,>=2.5 (from requests)
Downloading idna-2.6-py2.py3-none-any.whl (56kB)
Collecting urllib3<1.23,>=1.21.1 (from requests)
Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
Installing collected packages: certifi, chardet, idna, urllib3, requests
Successfully installed certifi-2017.11.5 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22
Adding requests to Pipfile's [packages]…
PS: You have excellent taste! ? ?? ?
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (2f8679)!
使用安裝好的包
現(xiàn)在安裝了 Requests,您可以創(chuàng)建一個簡單的 main.py 文件來使用它:
import requests
response = requests.get('https://httpbin.org/ip')
print('Your IP is {0}'.format(response.json()['origin']))
然后你就可以使用 pipenv run 運(yùn)行這段腳本:
pipenv run python main.py
輸出如下:
Your IP is 39.106.8.8
使用 $ pipenv run 可確保您的安裝包可用于您的腳本。我們還可以生成一個新的 shell, 確保所有命令都可以使用 $ pipenv shell 訪問已安裝的包。
下一步
恭喜,您現(xiàn)在知道如何安裝和使用Python包了!
更低層次: virtualenv
virtualenv 是一個創(chuàng)建隔絕的Python環(huán)境的 工具。virtualenv創(chuàng)建一個包含所有必要的可執(zhí)行文件的文件夾,用來使用Python工程所需的包。
它可以獨(dú)立使用,代替Pipenv。
通過pip安裝virtualenv:
pip install virtualenv
測試你的安裝
virtualenv --version
基本使用
為一個工程創(chuàng)建一個虛擬環(huán)境:
cd my_project_folder
virtualenv my_project
virtualenv my_project將會在當(dāng)前的目錄中創(chuàng)建一個文件夾,包含了Python可執(zhí)行文件, 以及 pip 庫的一份拷貝,這樣就能安裝其他包了。虛擬環(huán)境的名字(此例中是 my_project ) 可以是任意的;若省略名字將會把文件均放在當(dāng)前目錄。
在任何你運(yùn)行命令的目錄中,這會創(chuàng)建Python的拷貝,并將之放在叫做 my_project 的文件中。
你可以選擇使用一個Python解釋器(比如python2.7):
virtualenv -p /usr/bin/python2.7 my_project
或者使用~/.bashrc的一個環(huán)境變量將解釋器改為全局性的:
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7
2.要開始使用虛擬環(huán)境,其需要被激活:
source my_project/bin/activate
當(dāng)前虛擬環(huán)境的名字會顯示在提示符左側(cè)(比如說 (my_project)你的電腦:你的工程 用戶名$) 以讓你知道它是激活的。從現(xiàn)在起,任何你使用pip安裝的包將會放在 ``my_project 文件夾中, 與全局安裝的Python隔絕開。
像平常一樣安裝包,比如:
pip install requests
如果你在虛擬環(huán)境中暫時(shí)完成了工作,則可以停用它:
deactivate
這將會回到系統(tǒng)默認(rèn)的Python解釋器,包括已安裝的庫也會回到默認(rèn)的。
要刪除一個虛擬環(huán)境,只需刪除它的文件夾。(要這么做請執(zhí)行 rm -rf my_project )
然后一段時(shí)間后,你可能會有很多個虛擬環(huán)境散落在系統(tǒng)各處,你將有可能忘記它們的名字或者位置。
其他注意
運(yùn)行帶 --no-site-packages 選項(xiàng)的 virtualenv 將不會包括全局安裝的包。 這可用于保持包列表干凈,以防以后需要訪問它。(這在 virtualenv 1.7及之后是默認(rèn)行為)
為了保持你的環(huán)境的一致性,“冷凍住(freeze)”環(huán)境包當(dāng)前的狀態(tài)是個好主意。要這么做,請運(yùn)行:
pip freeze > requirements.txt
這將會創(chuàng)建一個 requirements.txt 文件,其中包含了當(dāng)前環(huán)境中所有包及 各自的版本的簡單列表。你可以使用 “pip list”在不產(chǎn)生requirements文件的情況下, 查看已安裝包的列表。這將會使另一個不同的開發(fā)者(或者是你,如果你需要重新創(chuàng)建這樣的環(huán)境) 在以后安裝相同版本的相同包變得容易。
pip install -r requirements.txt
這能幫助確保安裝、部署和開發(fā)者之間的一致性。
最后,記住在源碼版本控制中排除掉虛擬環(huán)境文件夾,可在ignore的列表中加上它。
virtualenvwrapper
virtualenvwrapper 提供了一系列命令使得和虛擬環(huán)境工作變得愉快許多。它把你所有的虛擬環(huán)境都放在一個地方。
安裝(確保 virtualenv 已經(jīng)安裝了):
pip install virtualenvwrapper
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
(virtualenvwrapper 的完整安裝指引.)
對于Windows,你可以使用 virtualenvwrapper-win 。
安裝(確保 virtualenv 已經(jīng)安裝了):
pip install virtualenvwrapper-win
在Windows中,WORKON_HOME默認(rèn)的路徑是 %USERPROFILE%Envs 。
基本使用
1.創(chuàng)建一個虛擬環(huán)境:
mkvirtualenv my_project
這會在 ~/Envs 中創(chuàng)建 my_project 文件夾。
2.在虛擬環(huán)境上工作:
workon my_project
或者,你可以創(chuàng)建一個項(xiàng)目,它會創(chuàng)建虛擬環(huán)境,并在 $PROJECT_HOME 中創(chuàng)建一個項(xiàng)目目錄。 當(dāng)你使用 workon myproject 時(shí),會 cd -ed 到項(xiàng)目目錄中。
mkproject myproject
virtualenvwrapper提供環(huán)境名字的tab補(bǔ)全功能。當(dāng)你有很多環(huán)境, 并且很難記住它們的名字時(shí),這就顯得很有用。
workon也能停止你當(dāng)前所在的環(huán)境,所以你可以在環(huán)境之間快速的切換。
3.停止是一樣的:
deactivate
4.刪除:
rmvirtualenv my_project
其他有用的命令
workon 虛擬環(huán)境名 # 進(jìn)入虛擬環(huán)境,可以敲完workon之后tab兩下查看所有的虛擬環(huán)境
lsvirtualenv #列舉所有的虛擬環(huán)境,我更傾向于workon+tab的方式
cdvirtualenv #導(dǎo)航到當(dāng)前激活的虛擬環(huán)境的目錄中,比如說這樣你就能夠?yàn)g覽它的 site-packages 。
cdsitepackages #和上面的類似,但是是直接進(jìn)入到 site-packages 目錄中。
lssitepackages #顯示 site-packages 目錄中的內(nèi)容。
<pre>
virtualenv-burrito
有了 virtualenv-burrito , 你就能使用單行命令擁有virtualenv + virtualenvwrapper的環(huán)境。
autoenv
當(dāng)你 cd 進(jìn)入一個包含 .env 的目錄中,就會 autoenv 自動激活那個環(huán)境。
使用 brew 在Mac OS X上安裝它:
brew install autoenv
在Linux上:
git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc