日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

Python/ target=_blank class=infotextkey>Python中的虛擬環(huán)境

虛擬環(huán)境是獨(dú)立的Python環(huán)境,有自己的site-packages。基本上,這意味著每個(gè)虛擬環(huán)境都有自己的一組對(duì)第三方軟件包的依賴。

如果在同一臺(tái)機(jī)器上開(kāi)發(fā)多個(gè)Python項(xiàng)目,虛擬環(huán)境會(huì)很有幫助。此外,當(dāng)你將Python代碼分發(fā)給其他人或在服務(wù)器上時(shí),虛擬環(huán)境非常方便,可以重現(xiàn)地創(chuàng)建與開(kāi)發(fā)機(jī)器上相同的環(huán)境。

今天,我們將學(xué)習(xí)

  • 有哪些工具可以創(chuàng)建隔離的環(huán)境
  • 哪些工具有助于Python項(xiàng)目中的包管理

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

在Python的生態(tài)系統(tǒng)中創(chuàng)建虛擬環(huán)境有兩種常見(jiàn)的方法:virtualenv和venv .

venv

venv是用Python創(chuàng)建虛擬環(huán)境的最流行的選擇。從Python 3.3開(kāi)始venv是標(biāo)準(zhǔn)庫(kù)的一部分,因此一般在安裝了Python后才可用。但是,基于Debian的linux發(fā)行版要求要安裝python3-venv,因?yàn)樗麄兊木S護(hù)者決定將這個(gè)模塊從核心Python安裝中分離出來(lái)。

使用創(chuàng)建虛擬環(huán)境venv可以從鍵入以下內(nèi)容開(kāi)始

python -m venv venv

該命令在當(dāng)前的文件夾中創(chuàng)建一個(gè)名為venv的文件。現(xiàn)在,要使用這個(gè)新的虛擬環(huán)境,必須使用以下命令激活它:

source venv/bin/activate # Use this command on bash
.venvScriptsactivate # On windows

啟動(dòng)Python解釋器并鍵入

>>> import sys
>>> sys.executable
'/Users/bas/Code/tmp/venv/bin/python'
>>> for path in sys.path:
...     print(repr(path))
...
''
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python39.zip'
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9'
'/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload'
'/Users/bas/Code/tmp2/venv/lib/python3.9/site-packages'
>>>

剛剛啟動(dòng)的Python解釋器位于你的虛擬環(huán)境中。此外site-packages目錄(pip安裝包所在的位置)指向虛擬環(huán)境中的一個(gè)路徑。

virtualenv

virtualenv 工作原理相似。要使用它,必須首先通過(guò)pip安裝它:

pip install virtualenv

然后可以

python -m virtualenv venv

請(qǐng)注意,只是將模塊的名稱從venv到virtualenv(第一個(gè)論點(diǎn))。這venv目標(biāo)文件夾保持不變。virtualenv將創(chuàng)建一個(gè)類似于venv以前有過(guò)。需要以與之前完全相同的方式激活新的虛擬環(huán)境:

source venv/bin/activate # On bash

virtualenv和...相對(duì)venv

你可能想知道這兩種工具有什么不同。

首先,virtualenv有更長(zhǎng)的歷史。它已經(jīng)在Python 2時(shí)代被使用了。直到3.3版,Python才加入了對(duì)虛擬環(huán)境的官方支持PEP 405 .

作為第三方軟件包,virtualenv具有獨(dú)立于系統(tǒng)Python安裝的額外優(yōu)勢(shì),因此可以獨(dú)立升級(jí)。

然而,使用的最大好處是virtualenv代替venv它允許針對(duì)除系統(tǒng)Python之外的Python版本。如果只安裝了Python 3.9,可以使用virtualenv用Python 3.10創(chuàng)建一個(gè)虛擬環(huán)境(當(dāng)然反之亦然)。你不僅可以使用任何想要的受支持的Python版本,還可以在沒(méi)有root或者Administrator權(quán)限,因?yàn)榘惭b是在你的工作目錄中完成的。

另一方面,使用virtualenv更加復(fù)雜。這是因?yàn)樗目鏟ython支持(甚至Python 2仍然支持)使得包和內(nèi)部的發(fā)現(xiàn)有點(diǎn)復(fù)雜,并且引導(dǎo)過(guò)程需要定制。如果你對(duì)這些內(nèi)幕感興趣,伯納特·加博的歐洲Python 2019演講涵蓋了這些見(jiàn)解。

總而言之:

 

venv

virtualenv

贊成的意見(jiàn)

  • 創(chuàng)建虛擬環(huán)境的“官方”方式
  • 更清晰的目錄結(jié)構(gòu)
  • 支持不同的Python版本
  • 獨(dú)立于系統(tǒng)Python
  • 棄用Python版本的兩年寬限期

面向連接的網(wǎng)絡(luò)服務(wù)(Connection Oriented.NETwork Service)

  • 比...慢virtualenv
  • 更容易出錯(cuò),因?yàn)樘摂M環(huán)境更復(fù)雜

安裝軟件包

既然我們已經(jīng)有了一個(gè)可以工作的虛擬環(huán)境virtualenv或者venv,我們可以開(kāi)始安裝我們需要安裝的包,以滿足我們項(xiàng)目的依賴性。

pip

pip 是在Python中安裝包的事實(shí)上的標(biāo)準(zhǔn),并且從Python 3.4版開(kāi)始就是標(biāo)準(zhǔn)庫(kù)的一部分。

要安裝軟件包,只需輸入

pip install django

pip負(fù)責(zé)在PyPI上查找包并管理它的依賴項(xiàng)。在我們的示例中,我們可以通過(guò)上面的命令檢查哪些包已經(jīng)安裝:

$ pip list
Package    Version
---------- -------
asgiref    3.5.0
Django     4.0.2
pip        21.1.3
setuptools 57.0.0
sqlparse   0.4.2

這樣,pip已安裝asgiref和sqlparse .

共享構(gòu)建環(huán)境的最常見(jiàn)方式是pip是通過(guò)創(chuàng)建一個(gè)requirements.txt看起來(lái)像這樣的文件:

django==4.0.2

問(wèn)題是pip它負(fù)責(zé)安裝依賴項(xiàng),但不負(fù)責(zé)安裝后的依賴項(xiàng)。例如,如果你安裝了django隨著pip它將安裝sqlparse和asgiref給你的。但是,如果卸載django之后,這兩個(gè)額外的包將被保留,不會(huì)被刪除。隨著時(shí)間的推移,你可能會(huì)忘記項(xiàng)目真正需要的包,以及那些只是以前安裝的包的剩余部分。當(dāng)你在項(xiàng)目的生命周期中從一個(gè)PyPI模塊遷移到另一個(gè)模塊時(shí),這種情況尤其適用。

pip也不區(qū)分開(kāi)發(fā)和生產(chǎn)環(huán)境。因此,可能需要訪問(wèn)開(kāi)發(fā)人員工具,例如black或者pytest開(kāi)發(fā)期間。在生產(chǎn)服務(wù)器上安裝這些軟件,往好里說(shuō)是不必要的,往壞里說(shuō)是有害的。

此外,當(dāng)兩個(gè)第三方包有沖突的依賴關(guān)系時(shí),pip沒(méi)有提供解決這些問(wèn)題的方法。

最后,管理你的requirements.txt不被照顧pip。一些開(kāi)發(fā)人員只是使用pip freeze > requirements.txt每當(dāng)安裝了新的依賴項(xiàng)時(shí)。然而,這是不可取的,因?yàn)樗鼘ㄗ右蕾嚕瑥亩鴲夯鲜鰡?wèn)題。

pipenv

pipenv 是由創(chuàng)建的工具肯尼斯·雷茨。最顯著的區(qū)別是pip那是pipenv旨在自動(dòng)跟蹤已安裝的軟件包。為此,pipenv創(chuàng)建兩個(gè)文件,Pipfile和Pipfile.lock .

pipenv解決以下問(wèn)題pip上面提到過(guò):

依賴性管理

安裝軟件包會(huì)自動(dòng)更新Pipfile還有Pipfile.lock

當(dāng)我們安裝時(shí)django隨著pipenv,它將安裝sqlparse和asgiref對(duì)我們來(lái)說(shuō)就像pip會(huì)的。然而,如果我們移除django從我們的要求來(lái)看,pipenv也將刪除這些額外的依賴項(xiàng)。

生產(chǎn)/開(kāi)發(fā)依賴性

一些依賴項(xiàng),比如linters或者測(cè)試工具,只在開(kāi)發(fā)環(huán)境中需要。這就是原因pipenv支持--dev旗幟。在生產(chǎn)系統(tǒng)上復(fù)制環(huán)境時(shí),不會(huì)安裝使用此標(biāo)志安裝的軟件包。

虛擬環(huán)境

pipenv還可以為您創(chuàng)建和管理虛擬環(huán)境。在實(shí)踐中,這意味著你可以完全依賴pipenv創(chuàng)建項(xiàng)目環(huán)境,包括安裝指定的Python版本。

隨著命令

pipenv --python 3.10

可以使用特定版本的Python輕松創(chuàng)建一個(gè)全新的虛擬env。

poetry

poetry 是Python的一個(gè)新的非常有雄心的包管理器。它的目標(biāo)是為開(kāi)發(fā)者可能遇到的所有虛擬環(huán)境和包管理問(wèn)題提供一個(gè)解決方案。

有趣的是,poetry–不像pipenv–不是的保護(hù)傘下的“官方”產(chǎn)品包Python打包權(quán)威。但是,它依賴于一個(gè)名為pyproject.toml(而不是Pipfile和Pipfile.lock如同pipenv確實(shí))。這pyproject.toml規(guī)范具有“官方地位”人教版518 .

還有,poetry可用于管理虛擬環(huán)境和包,以及構(gòu)建和發(fā)布自己的Python包。

pyproject.toml

poetry依賴于pyproject.toml文件,如下所示:

[tool.poetry]
name = "poetry_tutorial_project"
# ...

[tool.poetry.dependencies]
python = "^3.10"
loguru = "*"
psutil = "*"

[tool.poetry.dev-dependencies]
pytest = "*"

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

[tool.poetry.scripts]
run = "wsgi:main"

該文件是唯一的配置文件poetry使用并包含關(guān)于依賴關(guān)系、構(gòu)建說(shuō)明和測(cè)試環(huán)境的所有信息。

虛擬環(huán)境和骨骼創(chuàng)建

這poetry new projectname命令創(chuàng)建了一個(gè)合理的項(xiàng)目結(jié)構(gòu):

/projectname
├── README.md
├── projectname
│   └── __init__.py
├── pyproject.toml
└── tests
    ├── __init__.py
    └── test_projectname.py

可以添加依賴項(xiàng)

poetry add django

這--dev-dependency只能用于為開(kāi)發(fā)環(huán)境添加依賴項(xiàng)。

構(gòu)建并發(fā)布

poetry也可以負(fù)責(zé)構(gòu)建你的包并將其發(fā)布到PyPI。它取代了twine從這個(gè)意義上說(shuō)。這里有一個(gè)很好的指南使用poetry打包Python項(xiàng)目 .

pip和...相對(duì)pipenv和...相對(duì)poetry

 

pip

pipenv

poetry

贊成的意見(jiàn)

  • 可能是最常用的軟件包安裝程序
  • 易于使用,包含在標(biāo)準(zhǔn)庫(kù)中
  • 官方PyPA項(xiàng)目
  • 管理依賴關(guān)系,卸載軟件包時(shí)也是如此
  • 內(nèi)置虛擬環(huán)境創(chuàng)建
pyproject.toml

面向連接的網(wǎng)絡(luò)服務(wù)(Connection Oriented Network Service)

requirements.txt
  • 不支持pyproject.toml文件
  • 大項(xiàng)目范圍:沒(méi)有一個(gè)工作工具(也可以被視為優(yōu)勢(shì))

值得一提的其他工具

virtualenvwrApper

virtualenvwrapper 是對(duì)的一組擴(kuò)展virtualenv .

該軟件包附帶了一些方便的CLI實(shí)用程序。最重要的是:

  • mkvirtualenv:創(chuàng)建虛擬環(huán)境的快捷方式。而不是venv和virtualenv,虛擬環(huán)境由創(chuàng)建virtualenvwrapper不放在工作目錄中,而是放在$HOME目錄。虛擬環(huán)境是通過(guò)以下方式創(chuàng)建的mkvirtualenv projectenv .
  • workon:因?yàn)関irtualenvwrapper在中央位置創(chuàng)建虛擬環(huán)境,激活是通過(guò)workon命令。無(wú)論 你當(dāng)前的工作目錄是什么,都可以運(yùn)行workon projectenv,它會(huì)自動(dòng)從你的$HOME目錄并激活它。

pyenv

pyenv 是管理的工具Python版本。除了我們到目前為止討論的工具之外,它對(duì)管理虛擬環(huán)境和包管理都沒(méi)有幫助。然而,pyenv當(dāng)然,與其他工具兼容。pyenv可以成為搭建開(kāi)發(fā)工作站的便捷幫手。它本身不依賴于Python本身,因此可以方便地使用它來(lái)設(shè)置不同的Python安裝root /Administrator權(quán)利。

要安裝特定版本的Python,請(qǐng)鍵入:

pyenv install 3.10

使用pyenv結(jié)合虛擬環(huán)境管理器pyenv-團(tuán)隊(duì)創(chuàng)建了一些插件:

  • pyenv-virtualenv
  • pyenv-virtualenvwrapper

已棄用:pyvenv

pyvenv(不要與混淆pyenv)是一個(gè)用于創(chuàng)建虛擬環(huán)境的腳本,它過(guò)去是Python 3附帶的。從Python 3.6開(kāi)始,它已被棄用,并被取代python -m venv .

硬幣指示器 (coin-levelindicator的縮寫(xiě))命令行界面(Command Line Interface for batch scripting)

有時(shí)候你只想使用PyPI的CLI工具。在這種情況下,不需要虛擬環(huán)境進(jìn)行開(kāi)發(fā),只需要管理 CLI工具。你每天使用的不同CLI工具都有自己的依賴關(guān)系,因此在系統(tǒng)Python中安裝這些工具可能會(huì)再次導(dǎo)致已知的問(wèn)題。因此,為每個(gè)CLI工具創(chuàng)建單獨(dú)的虛擬環(huán)境是有意義的。

為了使這一過(guò)程方便和易于管理,有一些工具可以做到這一點(diǎn):為CLI工具創(chuàng)建一個(gè)隔離的環(huán)境,然后運(yùn)行這些CLI工具。

pipx

隨著 pipx 您可以安裝公開(kāi)CLI腳本的軟件包。pipx將自動(dòng)為每個(gè)CLI工具創(chuàng)建一個(gè)單獨(dú)的虛擬環(huán)境,并將一個(gè)符號(hào)鏈接放入一個(gè)名為.local/bin在你的內(nèi)心$HOME目錄。

要從PyPI安裝CLI工具,只需鍵入:

$ pipx install pycowsay
  installed package pycowsay 0.0.0.1, Python 3.9.6
  These apps are now globally available
    - pycowsay
done! :sparkles: :star2: :sparkles:

當(dāng)它被安裝后,你就神奇地在你的shell上擁有了CLI工具,并且它不會(huì)污染您系統(tǒng)的Python包。

$ pycowsay bas.codes

  ---------
< bas.codes >
  ---------
      ^__^
      (oo)_______
       (__)       )/
           ||----w |
           ||     ||

pip-run

pip-run 與...的目的相同pipx。唯一的區(qū)別是pip-run不提供持久的軟件包安裝,而是在工具執(zhí)行后刪除所有環(huán)境。

$ pip-run -q pycowsay -- -m pycowsay "bas.codes"


  ---------
< bas.codes >
  ---------
      ^__^
      (oo)_______
       (__)       )/
           ||----w |
           ||     ||

pip-run是一個(gè)很好的工具,因?yàn)樗梢詭湍闱謇怼I踔量梢允褂冒惭b的軟件包運(yùn)行交互式解釋器,這使得pip-run不僅對(duì)CLI工具有用,而且對(duì)研究PyPI中的模塊包也有用:

$ python -m pip-run -q boto
>>> import boto

分享到:
標(biāo)簽:Python
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定