poetry是一個Python虛擬環境和依賴管理的工具。poetry和pipenv類似,另外還提供了打包和發布的功能。
官方文檔:python-poetry.org/docs/
python項目部署:poetry管理本地環境,上線用docker
poetry 安裝
poetry提供多種安裝方式,個人推薦從以下2種方式中選擇:
方式一:(推薦)
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
方式二:(pip)
$ pip install --user poetry
安裝完成之后,將腳本路徑添加到 環境變量中,添加完成之后,可在終端輸入命令: poetry --version 來確認是否安裝配置完成。
工程初始化
新工程
如果當前還沒有創建工程,可以使用poetry新建工程:
輸入poetry new來創建一個項目腳手架,包括基本結構、pyproject.toml文件。
$ poetry new poetry-demo
這時候,會創建一個包含如下內容的工程
poetry-demo
├── pyproject.toml # 使用此文件管理依賴列表和項目的各種meta信息,用來替代 Pipfile、requirements.txt、setup.py、setup.cfg、MANIFEST.in 等等各種配置文件
├── README.rst
├── poetry_demo # 項目目錄
│ └── __init__.py
└── tests
├── __init__.py
└── test_poetry_demo.py
已有工程
在已有的項目使用poetry,只需要執行 poetry init 命令來創建一個pyproject.toml文件
$ poetry init
這時候,它會讓你輸入包名稱、版本號等信息,你可以選擇輸入,也可以選擇按下ENTER鍵使用默認值,完成以后,pyproject.toml如以下格式:
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["lepeng"][tool.poetry.dependencies]
python = "*"[tool.poetry.dev-dependencies]
pytest = "^3.4"
依賴包管理
安裝依賴包: poetry install
可以使用install命令直接解析并安裝 pyproject.toml 的依賴包
$ poetry install
將依賴包添加到pyproject.toml文件中,同時安裝它們: poetry add
$ poetry add numpy
還可以,通過添加配置參數–dev來區分不同環境下的依賴包。
- poetry add flask:安裝最新穩定版本的flask
- poetry add pytest --dev: 指定為開發依賴,會寫到pyproject.toml中的[tool.poetry.dev-dependencies]區域
- poetry add flask=2.22.0: 指定具體的版本
- poetry install: 安裝pyproject.toml文件中的全部依賴
- poetry install --no-dev:只安裝非development環境的依賴,一般部署時使用
更新所有鎖定版本的依賴包: poetry update
$ poetry update
更新指定依賴包
$ poetry update numpy
卸載依賴包: poetry remove
$ poetry remove numpy
查看可以更新的依賴: poetry show
$ poetry show --outdated
查看項目安裝的依賴: poetry show
$ poetry show
樹形結構查看項目安裝的依賴
$ poetry show -t
執行python命令 poetry run
$ poetry run python -V 主要用來執行python命令,會將run之后的命令放到python環境執行。
$ poetry run python app.py 運行Python腳本
將python文件打包 poetry build
主要用來將python文件打包,打包之后的產物有兩種包的格式:sdist是源碼格式;wheel是編譯之后的格式。
$ poetry build
將用build命令打包完成的產物上傳到PyPI上:poetry publish
配置正確的賬號和用戶名,這樣才可以正常上傳
$ poetry config http-basic.pypi username password
$ poetry publish
假如你們公司有自己的私有倉庫,則可以通過如下方式上傳:
先配置私有倉庫的信息,然后再上傳
$ poetry config repositories.foo https://foo.bar/simple/
$ poetry config http-basic.foo username password
$ poetry publish -r my-repository
虛擬環境管理
創建虛擬環境
創建虛擬環境有2種方式:
方式1:
如果在配置文件中配置了virtualenvs.create=true,執行 poetry install 或 poetry add 時會檢查是否有虛擬環境,否則會自動創建。
這里一個問題就是:如果系統中既有Python2又有Python3,且項目既支持Python2也支持Python3,那poetry會優先使用Python2。
方式2:利用 poetry env use 創建
指定創建虛擬環境時使用的Python解釋器版本
$ poetry env use python3.7
激活虛擬環境
$ poetry shell
查看虛擬環境信息
$ poetry env info
顯示虛擬環境列表
$ poetry env list
顯示虛擬環境絕對路徑
$ poetry env list --full-path
刪除虛擬環境
$ poetry env remove python3.7
查看python版本
$ poetry run python -V
poetry config 配置文件: config.toml
poetry提供了全局config配置和特定項目的config配置。
- windows下的全局config配置文件:C:\Users\fenglepeng\AppData\Roaming\pypoetry\config.toml
- macOS下的全局config配置文件:/Users/fenglepeng/Library/Application Support/pypoetry/config.toml
目前poetry支持的參數有:
name | 注釋 |
---|---|
cache-dir | poetry使用的緩存目錄的路徑默認值: macOS: ~/Library/Caches/pypoetry Windows: C:\Users\Appdata\Local\pypoetry\Cache Unix: ~/.cache/pypoetry |
virtualenvs.create | 默認值為true,如果執行 poetry install/poetry add時沒有虛擬環境,就自動創建一個虛擬環境,設置為false的話,當虛擬環境不存在時,會將包安裝到系統環境** ** |
virtualenvs.in-project | 默認值為false,設置為true的話,會在當前項目目錄下創建虛擬環境 |
virtualenvs.path | 虛擬環境的路徑,默認路徑 {cache-dir}\virtualenvs |
repositories. | 設置新的備用存儲庫,具體的參數待確定 |
也可以使用 poetry config 命令: poetry config ,key就是表格內的參數名,value就是參數要配置的值。
本地參數配置
可以在poetry config后加 -local來配置當前項目。
poetry config virtualenvs.create false --local
執行后,當前項目在執行poetry install/poetry add時如果沒有虛擬環境的話就會直接安裝到系統路徑上。
執行后,會在當前項目生成poetry.toml文件,全局配置config.toml文件不受影響:
全局配置
poetry config virtualenvs.create false
這里只是示范使用,virtualenvs.create這個參數其實基本不用修改,保留原值就好。
重置配置
poetry config的 -unset就是用來重置配置的,如果是重置全局配置:
poetry config virtualenvs.create --unset
如果是重置項目配置:
poetry config virtualenvs.create --local --unset
查看項目下的poetry.toml文件,可以看到值被重置了。
列出當前配置
列出當前項目的配置可以使用: poetry config --list
這里需要注意,列出配置時,包括了全局和本地的配置,本地的配置會覆蓋全局的參數:
舉例:virtualenvs.create全局為true,本地為false,那這里 virtualenvs.create=false