<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          不用 pip install,你養(yǎng)我嗎?

          共 3151字,需瀏覽 7分鐘

           ·

          2021-03-18 20:11

          我們?cè)陂_(kāi)發(fā) Python 項(xiàng)目的時(shí)候,我們總會(huì)使用到這么幾個(gè)玩意:

          • pip

          • requirements.txt

          • vent

          當(dāng)你創(chuàng)建一個(gè) Python 項(xiàng)目的時(shí)候,你會(huì)先整一個(gè)虛擬環(huán)境(virtualenv),在這里面使用到的第三方模塊,版本等,都只作用于你這個(gè)項(xiàng)目當(dāng)前的環(huán)境,和其他的項(xiàng)目互不干擾。

          比如,你可以創(chuàng)建一個(gè) Python3 的虛擬環(huán)境:


          現(xiàn)在,你的 Python 項(xiàng)目「my_project」就擁有了自己的 Python3 環(huán)境,你可以在這里面為所欲為,這樣好處是,在這里面所有的操作都不會(huì)和外界產(chǎn)生不必要的麻煩,比如你在這里使用 pip 安裝的模塊,就是只作用于這個(gè)環(huán)境中的,不會(huì)和你的系統(tǒng)搞得亂七八糟:

          當(dāng)你項(xiàng)目開(kāi)發(fā)完成,想要給別人使用,或者在生產(chǎn)環(huán)境中運(yùn)行時(shí),你可以使用 pip 將項(xiàng)目中使用到的庫(kù)生成一個(gè) 「requirements.txt」文件:

          pip freeze > requirements.txt

          這時(shí)候你當(dāng)前項(xiàng)目下會(huì)生成一個(gè) requirements.txt 文件,這里面列出來(lái)的就是你這個(gè)項(xiàng)目用到的庫(kù)以及相關(guān)的版本:

          那么,當(dāng)別人要使用你這個(gè)項(xiàng)目的時(shí)候,只需要使用如下命令就可以安裝你這個(gè)項(xiàng)目中所有依賴的庫(kù):

          pip install -r requirements.txt

          但是,經(jīng)過(guò)一段時(shí)間會(huì)發(fā)現(xiàn),你需要經(jīng)常去修改 「requirements.txt」中的內(nèi)容才能讓開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境相一致,比如說(shuō),你在你的項(xiàng)目中引用了兩個(gè)第三方庫(kù),而它們又引用了相同的庫(kù),但是版本不同,那么在生產(chǎn)環(huán)境中就可能出問(wèn)題。

          假設(shè)你項(xiàng)目引用了 「requests」和「click」庫(kù),而它們都引用了一個(gè)叫做「帥b」的庫(kù)。但是它們使用的版本不一樣,比如 「requests」 用的是 「帥b」1.0 版本:

          帥b==1.0

          而 「click」 用的是 2.0 版本

          帥b==2.0

          這時(shí)候,生產(chǎn)環(huán)境想通過(guò) pip install -r requirements.txt 來(lái)安裝依賴庫(kù),但 pip 發(fā)現(xiàn)現(xiàn)在「帥b」的最新版本是 3.0,然后直接懵逼了,我特么到底要安裝了 「帥b」1.0 版本還是 2.0 版本還是 3.0 版本?

          pip 這時(shí)候只能把先看到的那個(gè)安裝一波,先把 「帥b==1.0」給安裝了,然后再安裝一個(gè)最新的版本「帥b==3.0」。

          那么現(xiàn)在生產(chǎn)環(huán)境是沒(méi)有「帥b==2.0」版本的,假設(shè) click 庫(kù)只能用「帥b2.0」以下的版本,那么這時(shí)候在生產(chǎn)環(huán)境就用不了 click 的功能,項(xiàng)目撲街。



          于是,你需要去修改「requirements.txt」,比如改成這樣規(guī)定它不要亂來(lái):

          帥b>=1.0,<=2.0

          requests==2.25.1

          click==7.1.2

          ...

          那如果有很多這樣的情況,豈不是得叫爸爸了啊?



          有沒(méi)有更好的使用方式,讓 Python 項(xiàng)目的包管理更爽呢?


          那么接下來(lái)就是
          學(xué)習(xí) Python 的正確姿勢(shì)


          接下來(lái)小帥b要給你分享的是:pipenv。這名字看起來(lái)是 pip + virtualenv,不過(guò) pipenv 比他們更好用,它可以讓你的包管理更加的順滑酸爽。

          接下來(lái)小帥b帶你體驗(yàn)一波,首先你得先安裝好 pipenv:

          pip install pipenv

          pipenv 使用虛擬環(huán)境

          現(xiàn)在,我們創(chuàng)建虛擬環(huán)境是這樣的,進(jìn)入你的項(xiàng)目,使用:

          pipenv install

          你還可以在 install 指定虛擬環(huán)境使用的 Python 版本,比如使用 Python 2:

          pipenv install --two

          使用 Python 3.9.1

          Piping install --python3.9.1


          可以看到,我們把虛擬環(huán)境創(chuàng)建好了,接著使用如下命令來(lái)激活虛擬環(huán)境:

          pipenv shell

          當(dāng)然,如果你不想激活虛擬環(huán)境,但是想直接使用虛擬環(huán)境的話,可以使用如下命令來(lái)運(yùn)行:

          pipenv run

          看到這里,你可能會(huì)覺(jué)得,和上面的 venv 創(chuàng)建虛擬環(huán)境差不多啊?



          打開(kāi)你的項(xiàng)目文件,你可以看到,在使用 pipenv 創(chuàng)建虛擬環(huán)境的時(shí)候,多出來(lái)了兩個(gè)文件:

          Pipfile

          Pipfile.lock

          它們是干啥的呢?其實(shí)它們就是為了解決我們剛剛說(shuō)的那些包依賴的問(wèn)題。

          之前,我們總是需要在 requirements.txt 文件中改來(lái)改去。而現(xiàn)在有了它們,我們可以讓包管理變得很舒服。

          也就是說(shuō),現(xiàn)在我們通過(guò) pipenv 來(lái)操作第三方庫(kù)。你是刪除也好,更新也罷,它們都會(huì)幫你自動(dòng)更新,你不用再去操心 requirements.txt 了。

          比如,我們現(xiàn)在使用 pipenv 來(lái)安裝「requests」和 「click」庫(kù):

          pipenv install requests

          pipenv install click

          這時(shí)候 pipenv 會(huì)自動(dòng)將你使用的庫(kù)更新到 「Pipfile」和 「Pipfile.lock」文件中。

          pipfile:


          Pipfile.lock:


          pipfile 列出了我們所安裝的庫(kù)和 Python 版本等信息,Pipfile.lock 更為詳細(xì),其中還包含了庫(kù)的哈希值,這樣我們?cè)谏a(chǎn)環(huán)境中使用這些庫(kù)的時(shí)候,可以保證安裝到的庫(kù)是一模一樣的。

          值得注意的是,這兩文件不用我們手動(dòng)操作,它們會(huì)自動(dòng)隨著你的 pipenv 操作而更新。

          你可以使用 pipenv lock 命令來(lái)生成 Pipfile.lock,然后在生產(chǎn)環(huán)境中,你只需要 pipenv install,就可以安裝項(xiàng)目所依賴的庫(kù)了。

          現(xiàn)在你可以直接使用 pipenv 來(lái)代替這些玩意了:pip、requirements.txt、virtualenv。

          pipenv 常用的命令

          pipenv 有一些很好用的包管理命令,接下來(lái)給你介紹幾個(gè)常用到的命令:

          檢查庫(kù)的安全性:

          pipenv check

          Checking PEP 508 requirements...

          Passed!

          Checking installed package safety...

          All good!

          你剛看到的庫(kù)的安裝:

          piping install

          查看庫(kù)的依賴關(guān)系:

          pipenv graph

          click==7.1.2

          requests==2.25.1

          - certifi [required: >=2017.4.17, installed: 2020.12.5]

          - chardet [required: >=3.0.2,<5, installed: 4.0.0]

          - idna [required: >=2.5,<3, installed: 2.10]

          - urllib3 [required: >=1.21.1,<1.27, installed: 1.26.4]

          卸載庫(kù):

          pipenv uninstall click

          Uninstalling click...

          ...

          ? Success!

          Updated Pipfile.lock (fe5a22)!

          更新:

          pipenv update

          查看具體的庫(kù):

          pipenv open requests

          進(jìn)入虛擬環(huán)境:

          pipenv shell

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

          exit

          安裝 Pipfile.lock 中的庫(kù):

          pipenv sync 

          事實(shí)上,你可以直接輸入 pipenv,可以看到命令和參數(shù)的使用解釋:


          OK,以上就是小帥b今天給你帶來(lái)的分享,希望對(duì)你有幫助。




          那么我們下回見(jiàn),peace!

          瀏覽 77
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜精品无码 | 久久露脸国语精品国产91 | 最近2019中文字幕第一页 | 伊人99大香蕉 | 性爱视频免费无码 |