使用 Python Poetry 進行依賴管理

      網友投稿 1063 2025-03-31

      目錄

      注意先決條件

      相關術語

      Python Poetry Installation

      Get Started With Python Poetry

      Create a New Poetry Project

      檢查項目結構

      使用 pyproject.toml 文件

      Work With Python Poetry

      使用 Poetry 的虛擬環境

      聲明你的依賴

      安裝帶有 Poetry 的包

      Handle poetry.lock

      poetry.lock中的引腳依賴

      從poetry.lock 安裝依賴項

      更新依賴

      區分pyproject.toml和poetry.lock

      將poetry添加到現有項目

      將 pyproject.toml 添加到腳本文件夾

      使用現有的 requirements.txt 文件

      從poetry.lock 創建requirements.txt

      命令參考

      結論

      當您的 Python 項目依賴于外部包時,您需要確保使用每個包的正確版本。更新后,軟件包可能無法像更新前那樣工作。Python?Poetry 之類的依賴項管理器可幫助您指定、安裝和解析項目中的外部包。通過這種方式,您可以確保始終在每臺機器上使用正確的依賴版本。

      在本教程中,您將學習如何:

      開始一個新的Poetry項目

      將 Poetry 添加到現有項目

      使用pyproject.toml文件

      Pin?dependencies

      安裝依賴項?poetry.lock

      執行基本的Poetry CLI命令

      使用Poetry將幫助您啟動新項目、維護現有項目并掌握依賴項管理。您將準備好使用pyproject.toml文件,這將是在 Python 項目中定義構建需求的標準。

      要完成本教程并充分利用它,您應該對虛擬環境、模塊和包以及pip.

      雖然本教程側重于依賴項管理,但 Poetry 還可以幫助您構建和打包項目。如果您想分享您的工作,那么您甚至可以將您的 Poetry 項目發布到Python Packaging Index (PyPI)。

      注意先決條件

      在深入研究 Python Poetry 的細節之前,您需要了解一些先決條件。首先,您將閱讀本教程中將遇到的術語的簡短概述。接下來,您將安裝 Poetry 本身。

      相關術語

      如果您曾經import在 Python 腳本中使用過語句,那么您就已經使用過modules。其中一些模塊可能是您自己編寫的 Python 文件。其他可能是內置模塊,例如datetime。但是,有時 Python 提供的還不夠。那時您可能會轉向外部的打包模塊。當您的 Python 代碼依賴于外部模塊時,您可以說這些包是您項目的依賴項。

      您可以在PyPI 中找到不屬于Python 標準庫的包。在了解其工作原理之前,您需要在系統上安裝 Poetry。

      Python Poetry安裝

      要在命令行中使用 Poetry,您應該在系統范圍內安裝它。如果您只是想嘗試一下,那么您可以使用pip.?但是您應該謹慎嘗試這種方法,因為 Poetry 將安裝自己的依賴項,這可能會與您在項目中使用的其他包沖突。

      安裝 Poetry的推薦方法是使用官方install-poetry腳本。您可以手動下載并運行此Python 文件,也可以在下方選擇您的操作系統以使用相應的命令:

      視窗

      Linux + macOS

      PS C:\> (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -

      如果您使用的是 Windows,那么您可以使用Invoke-Webrequest帶有-UseBasicParsing選項的cmdlet將請求的 URL 的內容下載到標準輸出流 (stdout)。隨著管道字符(|),你移交輸出到標準輸入流(標準輸入)的python。在這種情況下,您將的內容通過管道install-poetry.py傳輸到 Python 解釋器。

      注意:有些用戶在 Windows 10 上使用 PowerShell 命令時會報告錯誤。

      在輸出中,您應該看到安裝完成的消息。您可以poetry --version在終端中運行以查看是否poetry有效。此命令將顯示您當前的 Poetry 版本。如果要更新 Poetry,則可以運行poetry self update.

      Python Poetry入門

      安裝 Poetry 后,是時候看看 Poetry 是如何工作的了。在本節中,您將學習如何開始一個新的 Poetry 項目以及如何將 Poetry 添加到現有項目中。您還將看到項目結構并檢查pyproject.toml文件。

      創建一個新的Poetry項目

      您可以使用new命令和項目名稱作為參數來創建新的 Poetry 項目。在本教程中,該項目稱為rp-poetry.?創建項目,然后進入新創建的目錄:

      $ poetry new rp-poetry $ cd rp-poetry

      通過運行poetry new rp-poetry,您可以創建一個名為 的新文件夾rp-poetry/。當您查看文件夾內部時,您會看到一個結構:

      rp-poetry/ │ ├── rp_poetry/ │ └── __init__.py │ ├── tests/ │ ├── __init__.py │ └── test_rp_poetry.py │ ├── README.rst └── pyproject.toml

      Poetry 會自動為您規范化包名。它將-項目名稱中的破折號 (?) 轉換_為文件夾名稱中的下劃線 (?)?rp_poetry/。否則,Python 中將不允許使用該名稱,因此您無法將其作為模塊導入。為了更好地控制創建包名稱,您可以使用該--name選項以不同于項目文件夾的方式命名:

      $ poetry new rp-poetry --name realpoetry

      如果您更喜歡將源代碼存儲在額外的src/父文件夾中,那么 Poetry 可以讓您使用以下--src標志來遵守該約定:

      $ poetry new --src rp-poetry $ cd rp-poetry

      通過添加--src標志,您創建了一個名為 的文件夾src/,其中包含您的rp_poetry/目錄:

      rp-poetry/ │ ├── src/ │ │ │ └── rp_poetry/ │ └── __init__.py │ ├── tests/ │ ├── __init__.py │ └── test_rp_poetry.py │ ├── README.rst └── pyproject.toml

      創建新的 Poetry 項目時,您將立即收到一個基本的文件夾結構。

      檢查項目結構

      該rp_poetry/子文件夾本身是不是很壯觀呢。在這個目錄中,你會找到一個__init__.py包含你的包版本的文件:

      # rp_poetry/__init__.py __version__ = "0.1.0"

      當您跳到tests/文件夾并打開 時test_rp_poetry.py,您會注意到它rp_poetry已經是可導入的:

      # tests/test_rp_poetry.py from rp_poetry import __version__ def test_version(): assert __version__ == "0.1.0"

      Poetry 還為該項目添加了第一個測試。該test_version()函數檢查 的__version__變量是否rp_poetry/__init__.py包含預期的版本。但是,該__init__.py文件并不是您定義包版本的唯一位置。另一個位置是pyproject.toml文件。

      使用pyproject.toml文件

      使用 Poetry 最重要的文件之一是pyproject.toml文件。這個文件不是 Poetry 的發明。這是 PEP 518 中定義的配置文件標準:

      此 PEP 指定 Python 軟件包應如何指定它們具有的構建依賴項以執行其選擇的構建系統。作為本規范的一部分,為軟件包引入了一個新的配置文件,用于指定它們的構建依賴項(期望相同的配置文件將用于未來的配置細節)。(來源)

      1# pyproject.toml 2 3[tool.poetry] 4name = "rp-poetry" 5version = "0.1.0" 6description = "" 7authors = ["Philipp "] 8 9[tool.poetry.dependencies] 10python = "^3.9" 11 12[tool.poetry.dev-dependencies] 13pytest = "^5.2" 14 15[build-system] 16requires = ["poetry-core>=1.0.0"] 17build-backend = "poetry.core.masonry.api"

      您可以在pyproject.toml文件中看到四個部分。這些部分稱為表。它們包含諸如 Poetry 之類的工具識別和用于依賴項管理或構建例程的指令。

      如果表名是特定于工具的,則必須以tool.為前綴。通過使用這樣的子表,您可以為項目中的不同工具添加說明。在這種情況下,只有tool.poetry.?但是,你可能會看到這樣的例子[tool.pytest.ini_options]為pytest在其他項目中。

      在[tool.poetry]上面第 3 行的子表中,您可以存儲有關您的 Poetry 項目的一般信息。您的可用鍵由 Poetry 定義。雖然有些鍵是可選的,但您必須指定四個鍵:

      name: 你的包名

      version: 包的版本,最好遵循語義版本控制

      description:您的包裹的簡短描述

      第[tool.poetry.dependencies]9 行和[tool.poetry.dev-dependencies]第 12行的子表對于您的依賴項管理至關重要。在下一部分向 Poetry 項目添加依賴項時,您將了解有關這些子表的更多信息。現在,重要的是要認識到的包相關性和發展依賴之間的區別。

      該pyproject.toml文件的最后一個表位于第[build-system]15 行。該表定義了 Poetry 和其他構建工具可以使用的數據,但由于它不是特定于工具的,因此它沒有前綴。Poetry 創建了pyproject.toml具有兩個鍵的文件:

      requires:構建包所需的依賴項列表,使此鍵成為必需

      build-backend:用于執行構建過程的 Python 對象

      如果您想更多地了解pyproject.toml文件的這一部分,那么您可以通過閱讀PEP 517 中的源代碼樹來了解更多信息。

      當您使用 Poetry 開始一個新項目時,這就是pyproject.toml您開始的文件。隨著時間的推移,您將添加有關您的包和您正在使用的工具的配置詳細信息。隨著 Python 項目的增長,您的pyproject.toml文件也會隨之增長。對于子表[tool.poetry.dependencies]和[tool.poetry.dev-dependencies].?在下一節中,您將了解如何擴展這些子表。

      使用 Python?Poetry

      一旦你設置了一個 Poetry 項目,真正的工作就可以開始了。一旦 Poetry 到位,您就可以開始編碼。在此過程中,您將了解 Poetry 如何為您提供虛擬環境并處理您的依賴項。

      使用 Poetry 的虛擬環境

      當您開始一個新的 Python 項目時,創建一個虛擬環境是一種很好的做法。否則,您可能會混淆來自不同項目的不同依賴項。使用虛擬環境是 Poetry 的核心功能之一,它永遠不會干擾您的全局 Python 安裝。

      但是,Poetry 不會在您啟動項目時立即創建虛擬環境。您可以通過讓 Poetry 列出連接到當前項目的所有虛擬環境來確認 Poetry 尚未創建虛擬環境。如果你還沒有,cd進入rp-poetry/然后運行一個命令:

      $ poetry env list

      目前,不應該有任何輸出。

      當您運行某些命令時,Poetry 會一路創建一個虛擬環境。如果您想更好地控制虛擬環境的創建,那么您可能決定明確告訴 Poetry 您要為其使用哪個 Python 版本,然后從那里開始:

      $ poetry env use python3

      使用此命令,您將使用與安裝 Poetry 相同的 Python 版本。使用python3的作品,當你在你的Python可執行程序PATH。

      注意:或者,您可以將絕對路徑傳遞給 Python 可執行文件。它應該與您可以在pyproject.toml文件中找到的 Python 版本約束相匹配。如果沒有,那么您可能會遇到麻煩,因為您使用的 Python 版本與項目所需的版本不同。在您的環境中運行的代碼在另一臺機器上可能有問題。

      更糟糕的是,外部包通常依賴于特定的 Python 版本。因此,安裝包的用戶可能會收到錯誤消息,因為您的依賴項版本與其 Python 版本不兼容。

      當你運行時env use,你會看到一條消息:

      Creating virtualenv rp-poetry-AWdWY-py3.9 in ~/Library/Caches/pypoetry/virtualenvs Using virtualenv: ~/Library/Caches/pypoetry/virtualenvs/rp-poetry-AWdWY-py3.9

      如您所見,Poetry 為您的項目環境構建了一個唯一名稱。該名稱包含項目名稱和 Python 版本。中間看似隨機的字符串是您的父目錄的哈希值。通過中間的這個唯一字符串,Poetry 可以處理系統上具有相同名稱和相同 Python 版本的多個項目。這很重要,因為默認情況下,Poetry 在同一個文件夾中創建所有虛擬環境。

      Poetry 無需任何其他配置,在virtualenvs/Poetry緩存目錄的文件夾中創建虛擬環境:

      如果要更改默認緩存目錄,則可以編輯Poetry 的配置。當您已經在使用virtualenvwrapper或其他第三方工具來管理您的虛擬環境時,這會很有用。要查看當前配置,包括已配置的cache-dir,您可以運行以下命令:

      $ poetry config --list

      通常,您不必更改此路徑。如果您想了解有關與 Poetry 的虛擬環境交互的更多信息,那么 Poetry 文檔包含有關管理環境的一章。

      只要您在項目文件夾中,Poetry 就會使用與之關聯的虛擬環境。如果您有疑問,可以env list再次運行以下命令檢查虛擬環境是否已激活:

      $ poetry env list

      這將顯示類似rp-poetry-AWdWY-py3.9 (Activated).?有了激活的虛擬環境,您就可以開始管理一些依賴項并看到 Poetry 的魅力了。

      聲明你的依賴

      Poetry 的一個關鍵元素是它對依賴項的處理。在開始之前,先看一下文件中的兩個依賴表pyproject.toml:

      # rp_poetry/pyproject.toml (Excerpt) [tool.poetry.dependencies] python = "^3.9" [tool.poetry.dev-dependencies] pytest = "^5.2"

      當前為您的項目聲明了兩個依賴項。一個是 Python 本身。另一個是pytest,一個廣泛使用的測試框架。正如您之前看到的,您的項目包含一個tests/文件夾和一個test_rp_poetry.py文件。使用pytest作為依賴項,Poetry 可以在安裝后立即運行您的測試。

      注意:在編寫本教程時,pytest使用Python 3.10運行Poetry不起作用。Poetry 安裝了一個與 Python 3.10 不兼容的 pytest 版本。

      Poetry 開發人員已經意識到這個問題,它將隨著 Poetry 1.2 的發布而得到修復。

      確保您在rp-poetry/項目文件夾中并運行命令:

      $ poetry install

      使用該install命令,Poetry 檢查您的pyproject.toml文件中的依賴項,然后解析并安裝它們。當您有許多依賴項需要使用不同版本的不同第三方包時,解析部分尤其重要。在安裝任何包之前,Poetry 會確定哪個版本的包滿足其他包設置為其要求的版本限制。

      除了pytest它的要求之外,Poetry 還安裝了項目本身。這樣,您可以立即導入rp_poetry到您的測試中:

      # tests/test_rp_poetry.py from rp_poetry import __version__ def test_version(): assert __version__ == "0.1.0"

      安裝項目包后,您可以導入rp_poetry測試并檢查__version__字符串。隨著pytest安裝,您可以使用poetry run命令來執行測試:

      1$ poetry run pytest 2========================= test session starts ========================== 3platform darwin -- Python 3.9.1, pytest-5.4.3, py-1.10.0, pluggy-0.13.1 4rootdir: /Users/philipp/Real Python/rp-poetry 5collected 1 item 6 7tests/test_rp_poetry.py . [100%] 8 9========================== 1 passed in 0.01s ===========================

      您當前的測試已成功運行,因此您可以放心地繼續編碼。但是,如果您仔細觀察第 3 行,就會發現有些奇怪。它說pytest-5.4.3,5.2不像pyproject.toml文件中所說的那樣。接得好!

      回顧一下,文件中的pytest依賴項pyproject.toml如下所示:

      # rp_poetry/pyproject.toml (Excerpt) [tool.poetry.dev-dependencies] pytest = "^5.2"

      ^前面的插入符號 (?)5.2具有特定的含義,它是 Poetry 提供的版本約束之一。這意味著 Poetry 可以安裝與版本字符串最左邊的非零數字匹配的任何版本。這意味著5.4.3允許使用。版本6.0將不被允許。

      當 Poetry 嘗試解析依賴版本時,像插入符號這樣的符號將變得很重要。如果只有兩個要求,這并不太難。你聲明的依賴越多,它就越復雜。讓我們看看 Poetry 如何通過將新包安裝到您的項目中來處理這個問題。

      安裝帶有 Poetry 的包

      您pip之前可能使用過安裝不屬于 Python 標準庫的包。如果您pip install使用包名作為參數運行,則pip在Python Package Index上查找包。您可以以同樣的方式使用 Poetry。

      如果你想在requests你的項目中添加一個外部包,那么你可以運行一個命令:

      $ poetry add requests

      通過運行poetry add requests,您正在將最新版本的requests庫添加到您的項目中。您可以使用版本約束,requests<=2.1或者requests==2.24如果您想更具體。當您不添加任何約束時,Poetry 將始終嘗試安裝最新版本的軟件包。

      有時,您只想在開發環境中使用某些包。使用pytest,您已經發現其中之一。另一種常見的庫包括一個代碼格式化像黑色,一個文檔生成等斯芬克斯,和類似的一個靜態分析工具pylint的,Flake8,mypy,或coverage.py。

      要明確告訴 Poetry 一個包是一個開發依賴項,您可以poetry add使用該--dev選項運行。您還可以使用速記-D選項,它與以下內容相同--dev:

      $ poetry add black -D

      您添加requests為項目依賴項和black開發依賴項。Poetry 在后臺為您做了一些事情。一方面,它將您聲明的依賴項添加到pyproject.toml文件中:

      # rp_poetry/pyproject.toml (Excerpt) [tool.poetry.dependencies] python = "^3.9" requests = "^2.26.0" [tool.poetry.dev-dependencies] pytest = "^5.2" black = "^21.9b0"

      Poetry 將該requests包作為項目依賴項添加到tool.poetry.dependencies表中,同時將其black作為開發依賴項添加到tool.poetry.dev-dependencies.

      區分項目依賴項和開發依賴項可以防止安裝用戶不需要運行程序的需求。開發依賴項僅與您的包的其他開發人員相關,他們希望pytest使用black.?當用戶安裝您的軟件包時,他們只會安裝requests它。

      注意:?您可以更進一步并聲明可選的依賴項。當您想讓用戶選擇安裝一個不需要但增強您的包的特定數據庫適配器時,這會很方便。您可以在Poetry 文檔 中了解有關可選依賴項的更多信息。

      除了對pyproject.toml文件的更改之外,Poetry 還創建了一個名為poetry.lock.?在此文件中,Poetry 會跟蹤您在項目中使用的所有包和確切版本。

      處理?poetry.lock

      當您運行該poetry add命令時,Poetry 會自動更新pyproject.toml并固定poetry.lock文件中的已解析版本。但是,您不必讓 Poetry 完成所有工作。您可以手動向pyproject.toml文件添加依賴項并在之后鎖定它們。

      引腳依賴關系?poetry.lock

      如果您想使用 Python 構建網絡爬蟲,那么您可能需要使用Beautiful Soup來解析您的數據。將其添加到文件中的tool.poetry.dependencies表中pyproject.toml:

      # rp_poetry/pyproject.toml (Excerpt) [tool.poetry.dependencies] python = "^3.9" requests = "^2.26.0" beautifulsoup4 = "4.10.0"

      通過添加beautifulsoup4 = "4.10.0",您告訴 Poetry 它應該完全安裝這個版本。當您向pyproject.toml文件添加需求時,它尚未安裝。只要poetry.lock你的項目中沒有文件存在,你就可以poetry install在手動添加依賴后運行,因為 Poetry 會先查找poetry.lock文件。如果沒有找到,Poetry 將解析pyproject.toml文件中列出的依賴項。

      一旦poetry.lock文件存在,Poetry 將依賴該文件來安裝依賴項。僅運行poetry install會觸發警告,提示兩個文件不同步并會產生錯誤,因為 Poetry 尚不知道beautifulsoup4項目中的任何版本。

      要將pyproject.toml文件中手動添加的依賴項固定到poetry.lock,您必須首先運行以下poetry lock命令:

      $ poetry lock Updating dependencies Resolving dependencies... (1.5s) Writing lock file

      通過運行poetry lock,Poetry 處理pyproject.toml文件中的所有依賴項并將它們鎖定到poetry.lock文件中。詩歌并不止于此。運行時poetry lock,Poetry 還會遞歸遍歷并鎖定您的直接依賴項的所有依賴項。

      注意:poetry lock如果有適合您的版本限制的新版本可用,該命令還會更新您現有的依賴項。如果您不想更新poetry.lock文件中已有的任何依賴項,則必須將--no-update選項添加到poetry lock命令中:

      $ poetry lock --no-update Resolving dependencies... (0.1s)

      在這種情況下,Poetry 僅解析新的依賴項,但poetry.lock不會更改文件中的任何現有依賴項版本。

      現在您已經固定了所有依賴項,是時候安裝它們以便您可以在您的項目中使用它們。

      安裝依賴項?poetry.lock

      如果您按照上一節中的步驟操作,那么您已經安裝pytest并black使用了該poetry add命令。您還鎖定了beautifulsoup4,但您還沒有安裝 Beautiful Soup。要驗證beautifulsoup4尚未安裝,請使用以下命令打開Python 解釋器poetry run:

      $ poetry run python3

      執行poetry run python3將在 Poetry 的環境中打開一個交互式REPL會話。首先,嘗試導入requests.?這應該完美無缺。然后嘗試 importing?bs4,這是 Beautiful Soup 的模塊名稱。這應該會引發錯誤,因為尚未安裝 Beautiful Soup:

      >>>

      >>> import requests >>> import bs4 Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'bs4'

      正如預期的那樣,您可以requests毫無困難地導入,并且bs4找不到模塊。通過鍵入exit()并點擊退出交互式 Python 解釋器Enter。

      使用poetry lock命令鎖定依賴項后,您必須運行該poetry install命令,以便您可以在項目中實際使用它們:

      $ poetry install Installing dependencies from lock file Package operations: 2 installs, 0 updates, 0 removals ? Installing soupsieve (2.2.1) ? Installing beautifulsoup4 (4.10.0) Installing the current project: rp-poetry (0.1.0)

      通過運行poetry install,Poetry 讀取poetry.lock文件并安裝其中聲明的所有依賴項。現在,bs4已準備好在您的項目中使用。要對此進行測試,請輸入poetry run python3并導入bs4Python 解釋器:

      >>>

      >>> import bs4 >>> bs4.__version__ '4.10.0'

      完美的!這次沒有錯誤,并且您擁有您聲明的確切版本。這意味著 Beautiful Soup 已正確固定在您的poetry.lock文件中,已安裝在您的項目中,并且可以使用了。要列出項目中的可用包并檢查它們的詳細信息,您可以使用該show命令。當您使用--help標志運行它時,您將看到如何使用它:

      $ poetry show --help

      要檢查包,您可以使用show包名稱作為參數,也可以使用--tree選項將所有依賴項以樹的形式列出。這將幫助您查看項目的嵌套需求。

      更新依賴

      為了更新您的依賴項,Poetry 根據兩種情況提供了不同的選項:

      更新版本約束內的依賴項。

      更新版本約束之外的依賴項。

      您可以在pyproject.toml文件中找到版本限制。當新版本的依賴項仍然滿足您的版本限制時,您可以使用以下update命令:

      $ poetry update

      該update命令將在版本限制內更新所有包及其依賴項。之后,Poetry 將更新您的poetry.lock文件。

      如果你想更新一個或多個特定的包,那么你可以將它們作為參數列出:

      $ poetry update requests beautifulsoup4

      使用此命令,Poetry 將搜索滿足文件中列出的版本限制的新版本requests和新版本。然后它將解析您項目的所有依賴項并將版本固定到您的文件中。您的文件將保持不變,因為列出的約束仍然有效。beautifulsoup4pyproject.tomlpoetry.lockpyproject.toml

      如果要使用比pyproject.toml文件中定義的版本更高的版本來更新依賴項,則需要pyproject.toml事先調整文件。另一種選擇是add使用版本約束或latest標簽運行命令:

      $ poetry add pytest@latest --dev

      當您運行add帶有latest標記的命令時,它會查找包的最新版本并更新您的pyproject.toml文件。包含latest標簽或版本約束對于使用該add命令至關重要。如果沒有它,您會收到一條消息,表明該包已存在于您的項目中。另外,不要忘記--dev為開發依賴項添加標志。否則,您會將包添加到常規依賴項中。

      添加新版本后,您必須運行install您在上一節中學到的命令。只有這樣,您的更新才會被鎖定到poetry.lock文件中。

      如果您不確定更新會為您的依賴項引入哪些基于版本的更改,您可以使用該--dry-run標志。此標志適用于命令update和add命令。它在您的終端中顯示操作而不執行任何操作。這樣,您可以安全地發現版本更改并決定哪種更新方案最適合您。

      區分pyproject.toml和poetry.lock

      雖然pyproject.toml文件中的版本要求可能很寬松,但 Poetry 會鎖定您在poetry.lock文件中實際使用的版本。這就是為什么在使用Git 時應該提交此文件的原因。通過poetry.lock在Git 存儲庫中提供文件,您可以確保所有開發人員都將使用所需軟件包的相同版本。當您遇到包含poetry.lock文件的存儲庫時,最好使用 Poetry。

      使用poetry.lock,您可以確保您使用的版本與其他開發人員使用的版本完全相同。如果其他開發人員不使用 Poetry,您可以將其添加到未使用 Poetry 設置的現有項目中。

      將poetry添加到現有項目

      很有可能,您的項目不是從poetry new命令開始的。或者,您可能繼承了一個不是用 Poetry 創建的項目,但現在您想使用 Poetry 進行依賴管理。在這些類型的情況下,您可以將 Poetry 添加到現有的 Python 項目中。

      添加pyproject.toml到腳本文件夾

      如果您的項目只包含一些 Python 文件,那么您仍然可以添加 Poetry 作為未來構建的基礎。在這個例子中,只有一個文件,hello.py:

      # rp-hello/hello.py print("Hello World!")

      這個腳本唯一能做的就是輸出字符串"Hello World!"。但也許這只是一個宏偉項目的開始,因此您決定將 Poetry 添加到您的項目中。poetry new您將使用以下poetry init命令,而不是使用之前的命令:

      $ poetry init This command will guide you through creating your pyproject.toml config. Package name [rp-hello]: rp-hello Version [0.1.0]: Description []: My Hello World Example Author [Philipp , n to skip]: License []: Compatible Python versions [^3.9]: Would you like to define your main dependencies interactively? (yes/no) [yes] no Would you like to define your development dependencies interactively? (yes/no) [yes] no Generated file

      該poetry init命令將啟動交互式會話以創建pyproject.toml文件。 Poetry 為您提供了大多數需要設置的配置的建議,您可以按下Enter以使用它們。當您不聲明任何依賴項時,pyproject.tomlPoetry 創建的文件如下所示:

      # rp-hello/pyproject.toml [tool.poetry] name = "rp-hello" version = "0.1.0" description = "My Hello World Example" authors = ["Philipp "] [tool.poetry.dependencies] python = "^3.9" [tool.poetry.dev-dependencies] [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api"

      內容看起來與您在前幾節中經歷的示例相似。

      現在您可以使用 Poetry 項目提供的所有命令。有了pyproject.toml文件,您現在可以運行腳本:

      $ poetry run python3 hello.py Creating virtualenv rp-simple-UCsI2-py3.9 in ~/Library/Caches/pypoetry/virtualenvs Hello World!

      因為 Poetry 沒有找到任何可以使用的虛擬環境,所以它在執行您的腳本之前創建了一個新環境。執行此操作后,它會顯示您的Hello World!消息而沒有任何錯誤。這意味著您現在有一個正在運行的 Poetry 項目。

      使用現有requirements.txt文件

      有時您的項目已經有一個requirements.txt文件。看看requirements.txt這個Python 網絡爬蟲的文件:

      $ cat requirements.txt beautifulsoup4==4.9.3 certifi==2020.12.5 chardet==4.0.0 idna==2.10 requests==2.25.1 soupsieve==2.2.1 urllib3==1.26.4

      使用該cat實用程序,您可以讀取文件并將內容寫入標準輸出。在本例中,它顯示了網絡爬蟲項目的依賴項。使用 創建 Poetry 項目后poetry init,您可以將該cat實用程序與以下poetry add命令結合使用:

      $ poetry add `cat requirements.txt` Creating virtualenv rp-require-0ubvZ-py3.9 in ~/Library/Caches/pypoetry/virtualenvs Updating dependencies Resolving dependencies... (6.2s) Writing lock file Package operations: 7 installs, 0 updates, 0 removals ? Installing certifi (2020.12.5) ? Installing chardet (4.0.0) ? Installing idna (2.10) ? Installing soupsieve (2.2.1) ? Installing urllib3 (1.26.4) ? Installing beautifulsoup4 (4.9.3) ? Installing requests (2.25.1)

      當需求文件像這樣簡單時,使用poetry add和cat可以為您節省一些手動工作。

      requirements.txt然而,有時文件會更復雜一些。在這些情況下,您可以執行測試運行并查看結果,或者手動將需求添加到文件中的[tool.poetry.dependencies]表中pyproject.toml。要查看您的結構pyproject.toml是否有效,您可以在poetry check之后運行。

      創建requirements.txt自poetry.lock

      在某些情況下,您必須有一個requirements.txt文件。例如,也許您想在 Heroku 上托管您的 Django 項目。對于這種情況,Poetry 提供了export命令。如果你有一個 Poetry 項目,你可以requirements.txt從你的poetry.lock文件中創建一個文件:

      $ poetry export --output requirements.txt

      poetry export以這種方式使用該命令會創建一個requirements.txt包含散列和環境標記的文件。這意味著您可以確保處理與poetry.lock文件內容類似的非常嚴格的要求。如果您還想包含您的開發依賴項,您可以添加--dev到命令中。要查看所有可用選項,您可以選中poetry export --help。

      命令參考

      使用 Python Poetry 進行依賴管理

      本教程向您介紹了 Poetry 的依賴管理。在此過程中,您使用了一些 Poetry 的命令行界面 (CLI) 命令:

      您可以查看Poetry CLI 文檔以了解有關上述命令和 Poetry 提供的其他命令的更多信息。您還可以poetry --help直接在終端中運行以查看信息!

      結論

      在本教程中,您探索了如何創建新的 Python Poetry 項目以及如何將 Poetry 添加到現有項目中。Poetry 的一個關鍵部分是pyproject.toml文件。與 結合使用poetry.lock,您可以確保安裝項目所需的每個包的確切版本。當您跟蹤poetry.lockGit 存儲庫中的文件時,您還要確保項目中的所有其他開發人員在他們的機器上安裝相同的依賴項版本。

      在本教程中,您學習了如何:

      開始一個新的Poetry項目

      將 Poetry 添加到現有項目

      使用pyproject.toml文件

      Pin?dependencies

      安裝依賴項?poetry.lock

      執行基本的Poetry CLI命令

      本教程側重于 Poetry 依賴項管理的基礎知識,但 Poetry 還可以幫助您構建和上傳包。如果您想體驗一下這種功能,那么您可以閱讀有關在將開源 Python 包發布到 PyPI時如何使用 Poetry 的信息)。

      Python 虛擬化

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在虛擬云主機上安裝 Cloud Foundry
      下一篇:wps怎么每月的數據透視表(wps數據透視表怎么按月匯總)
      相關文章
      亚洲精品伦理熟女国产一区二区| 亚洲啪啪免费视频| 亚洲综合一区国产精品| 亚洲乱码一二三四区国产| 激情内射亚洲一区二区三区| 久久精品国产亚洲| 久久亚洲精品无码| 亚洲国产一区二区a毛片| 亚洲国产精品久久久久网站| 亚洲AV区无码字幕中文色| 亚洲国产精华液网站w| 久久亚洲精品中文字幕三区| 日本红怡院亚洲红怡院最新| 亚洲第一AAAAA片| 亚洲欧洲日产国码久在线观看| 亚洲91av视频| 亚洲综合在线成人一区| 亚洲国产精品综合一区在线| 亚洲综合色区中文字幕| 亚洲中文字幕无码久久2020| 亚洲精品无码少妇30P| 国产成人亚洲综合无| 亚洲国产综合精品中文字幕| 亚洲一级黄色视频| 亚洲综合网站色欲色欲| 亚洲国产精品成人精品无码区在线| 亚洲成av人影院| 亚洲精品在线电影| 亚洲制服丝袜第一页| 亚洲精品无码少妇30P| 亚洲精品国产综合久久一线| 亚洲自偷自偷图片| 婷婷久久久亚洲欧洲日产国码AV | 亚洲黄色在线网站| 亚洲伊人久久大香线蕉啊| 亚洲熟女综合色一区二区三区| 亚洲av日韩aⅴ无码色老头| 亚洲AⅤ永久无码精品AA| 中文字幕亚洲一区二区三区| 久久久综合亚洲色一区二区三区| 亚洲精品无码久久久久久久 |