天天看點

poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

Python虛拟環境和依賴管理工具-poetry

1. poetry 是什麼

Poetry 和 Pipenv 類似,是一個 Python 虛拟環境和項目打包工具,比如打包和釋出。它可以讓你用 Poetry 來同時管理 Python 庫和虛拟環境。
           
  • 首頁:https://poetry.eustace.io/
  • 源碼:https://github.com/sdispater/poetry
  • 文檔:https://poetry.eustace.io/docs

2. poetry怎麼安裝

安裝poetry的官方指令
$ curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

執行效果:
           
poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包
解決方法:下載下傳get-poetry.py腳本手動安裝
腳本位址:https://github.com/python-poetry/poetry/blob/master/get-poetry.py

本地執行該腳本,然後在終端執行 poetry --version 檢視是否安裝成功
執行效果:
           
poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

Poetry 怎麼用

Python包管理之poetry基本使用 - 知乎 (zhihu.com)

兩種情況: 1. 在一個已有的項目裡面使用Poetry 2. 建立一個新的Python項目

第一種情況下,需要建立一個pyproject.toml檔案
poetry init
根據提示輸入項目資訊
執行效果:
           
poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

注:根據它的提示輸入你的項目資訊,不确定的内容就按下 Enter 使用預設值,後續也可以手動更新。指定依賴的環節可以跳過,手動安裝會更高效一點。

第二種情況下,建立一個新的 Python 項目,使用 poetry new <檔案夾名稱> 指令
poetry new <檔案夾名稱>,例如poetry new demo
執行效果:
           
poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

poetry建立虛拟環境

poetry install (會讀取并安裝pyproject.toml中的依賴,同時會建立虛拟環境,把這些依賴裝在虛拟環境裡)
poetry env use <python.exe路徑>
poetry shell (激活虛拟環境)
poetry env info (檢視虛拟環境資訊)
poetry env list (檢視虛拟環境清單)
           

poetry安裝包

poetry add <包名>
例如 poetry add flask --dev (--dev可以指定為開發依賴)
           

poetry 檢視包

poetry 可以通過一行指令檢視所有安裝的依賴
poetry show

也可以通過一行指令檢視依賴關系
poetry show --tree

還可以檢視可以更新的依賴
poetry show --outdated

想要一次性更新所有的依賴
poetry update

隻更新某個依賴
poetry update <包名>
           

poetry 解除安裝包

還支援更多操作

例如:在 pyproject.toml 配置檔案中添加國内鏡像源位址配置,提高下載下傳速度

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-8fj1qJfY-1626507430354)(C:\Users\Administrator\Desktop\風控模組化與規則挖掘\鏡像源.png)]

入門版 :https://zhuanlan.zhihu.com/p/81025311

基本版:Python包管理之poetry基本使用 - 知乎 (zhihu.com)

優點

  • 使用标準的 pyproject.toml 檔案,不用寫多個配置檔案
  • 同時支援管理 Python 程式和 Python 庫
  • 更符合直覺的預設設計,比如不會随便更新鎖定版本的依賴
  • 幹淨簡潔的指令行輸出,沒有星星和蛋糕
  • 安裝包的時候,使用 upper bound 版本限定,而不是 Pipenv 預設的通配符
  • 解除安裝包的時候,直接解除安裝孤立的子依賴,不需要像 Pipenv 那樣需要再執行 pipenv clean

缺點

  • 引入新的 pyproject.toml 标準,舊項目需要一點遷移成本和學習成本
  • 會有一些潛在的 bug
  • 解析依賴的過程偶爾會久一點
  • 對虛拟環境的管理控制有些弱,沒有 Pipenv 那樣的删除虛拟環境和清空依賴的操作
  • 缺少一個穩定的維護團隊,有大量 issue 和 PR 等待處理,但情況在逐漸好轉

當然,你還是可以選擇繼續使用 virtualenv/venv 和 pip 這些基礎工具,直到有一個完美的解決方案出現。或者,也可以選擇試試新東西,然後嘗試改進它,讓完美的解決方案早一點出現。

學習poetry曆程

  1. 首先要知道的的是依賴的概念,簡單的說就是一個項目或者一個程式要運作所依賴某些包/庫(pandas, numpy, scikit-learn)等等。
  2. 依賴管理工具(maven, npm, pip)等。python包基本都可以通過pip install 安裝, pip uninstall 解除安裝
  3. 虛拟環境,Python和Java、JS這些程式設計語言本質上存在差異導緻,Java、JS是以項目進行隔離,每當開發一個項目,依賴包都是安裝在項目工程路徑下。每個工程之間是隔離的,這樣,即便是不同工程用到同一個包的不同版本,它們之間也不會産生沖突。
    poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

但是,Python則不同,在Python中無法通過工程對依賴包進行隔離。當我們之間使用

pip

安裝第三方包時,所有的依賴都會安裝到安裝目錄下的

site-packages

poetry項目打包工具詳細介紹及示範Python虛拟環境和依賴管理工具-poetrypoetry安裝包

不同的依賴安裝到不同的虛拟環境中,然後不同的項目可以基于不同的虛拟環境運作。

  1. 發現不足:針對Python依賴管理和虛拟環境經常會用到2個工具:

    pip

    virtualenv

    • 需要同時依賴2款管理工具
    • 不能動态更新requirements.txt
  2. pipenv試圖解決這個問題。
    pipenv可以看成是pip+virtualenv兩款工具的合體,它集合了pip的依賴包管理和virtualenv虛拟環境管理于一身。另外,在依賴包記錄方面使用Pipfile替代原來的requirements.txt。而且,它能夠自動記錄并更新記錄檔案,這樣就不再需要手動執行指令來更新requirements.txt
               
  3. 但是,它也存在不足
    1.Lock速度緩慢
     2.強行更新不相幹依賴
     3.依賴處理效果較差
    一個例子:pipenv install oslo.utils==1.4.0  
    Could not find a version that matches pbr!=0.7,!=2.1.0,<1.0,>=0.6,>=2.0.0
    即使你的項目還可以用2.0.0,0.6。pipenv隻會簡單粗暴的報錯,不會靈活處理這個問題。
               
  4. 發現了主角poetry的存在
    內建了pipenv的優勢,同時還可以用于python工程打包和釋出。poetry通過配置檔案pyproject.toml來完成依賴管理、環境配置、基本資訊配置等功能。相當于把Python項目中的Pipfile、setup.py、setup.cfg、requirements.txt、MANIFEST.in融合到一起。
    
    poetry相比于pipenv具有很多明顯優勢的功能:
    
     1.更強大的依賴處理功能
     2.易于打包和建構Python工程
     3.易于釋出工具包
     4.結構化展示依賴關系
               
    還是上面那個問題,如果是poetry安裝的話可能會幫你安裝一個最新版,或者某個可用的版本。

打包和釋出python工程

如果需要把我們的工程部署到生産環境伺服器上,這時候就需要用到Python的打包和安裝功能

$ poetry build

Building poetry (1.0.0)
- Building sdist
- Built poetry-1.0.0.tar.gz

- Building wheel
- Built poetry-1.0.0-py2.py3-none-any.whl
           

把工程釋出到PyPI倉庫, 在poetry中,隻需要簡單配置一下

pyproject.toml

,就可以實作一行指令釋出工具包

$ poetry publish

Publishing poetry (1.0.0) to PyPI

  - Uploading poetry-1.0.0.tar.gz 100%
  - Uploading poetry-1.0.0-py2.py3-none-any.whl 58%
           

把工程釋出到PyPI倉庫, 在poetry中,隻需要簡單配置一下

pyproject.toml

,就可以實作一行指令釋出工具包

$ poetry publish

Publishing poetry (1.0.0) to PyPI

  - Uploading poetry-1.0.0.tar.gz 100%
  - Uploading poetry-1.0.0-py2.py3-none-any.whl 58%
           

原創不易,資源整合不易,點贊也不易!!

我堅持原創,堅持資源整合,你堅持點贊!!

如果你發現了問題,歡迎留言指正 ❤️ ❤️