poetry是一个Python虚拟环境和依赖管理的工具。poetry和pipenv类似,另外还提供了打包和发布的功能。
官方文档:python-poetry.org/docs/
python项目部署:poetry管理本地环境,上线用docker
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"
可以使用install命令直接解析并安装 pyproject.toml 的依赖包
$ poetry install
$ poetry add numpy
还可以,通过添加配置参数–dev来区分不同环境下的依赖包。
$ poetry update
$ poetry update numpy
$ poetry remove numpy
$ poetry show --outdated
$ poetry show
$ poetry show -t
$ poetry run python -V 主要用来执行python命令,会将run之后的命令放到python环境执行。
$ poetry run python app.py 运行Python脚本
主要用来将python文件打包,打包之后的产物有两种包的格式:sdist是源码格式;wheel是编译之后的格式。
$ poetry build
配置正确的账号和用户名,这样才可以正常上传
$ 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配置。
目前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