macos 使用
install
brew install poetry
初始化
mkdir project-demo
cd project-demo
poetry init
管理虚拟环境
- 创建虚拟环境
- 虚拟环境的命名模式为 项目名-随机数-python版本
poetry env use PYTHONPATH
- 查看当前虚拟环境
poetry env list
- 查看当前poetry配置
poetry config --list
- 允许在项目目录下创建虚拟环境
poetry config virtualenvs.in-project true
如果已经创建了环境需要先移除
poetry env remove PYTHONPATH创建目录:poetry env use PYTHONPATH
- 退出与启动环境
已 poetry 开头的命令自动检测当前环境 同样也可以使用
poetry shell进入 退出环境:deactivate
poetry 指令
添加依赖包
poetry add
poetry add requests
poetry.lock 与更新顺序
除了更新 pyproject.toml ,此时项目中还会新增一个文件,名为 poetry.lock ,它实际上就相当于 pip 的 requirements.txt ,详细记录了所有安装的模块与版本。 当使用 poetry add 指令时,poetry 会自动依序帮你做完这三件事:
- 更新
pyproject.toml。 - 依照
pyproject.toml的内容,更新poetry.lock。 - 依照
poetry.lock的内容,更新虚拟环境。 - 由此可见,
poetry.lock的内容是取决于pyproject.toml,但两者并不会自己连动,一定要基于特定指令才会进行同步与更新,poetry add就是一个典型案例。
poetry lock :更新 poetry.lock
当你自行修改了 pyproject.toml 内容,比如变更特定模块的版本(这是有可能的,尤其在手动处理版本冲突的时候),此时 poetry.lock 的内容与 pyproject.toml 出现了脱钩,必须让它依照新的 pyproject.toml 内容更新、同步,使用指令:
poetry lock
如此一来,才能确保手动修改的内容,也更新到 poetry.lock 中,毕竟虚拟环境如果要重新建立,是基于 poetry.lock 的内容来安装模块,而非 pyproject.toml 。
还是那句话:
poetry.lock 相当于 Poetry 的 requirements.txt。
但要特别注意的是, poetry lock 指令,仅会更新 poetry.lock ,不会同时安装模块至虚拟环境
因此,在执行完 poetry lock 指令后,必须再使用 poetry install 来安装模块。否则就会出现 poetry.lock 和虚拟环境不一致的状况。
更多 poetry lock 细节可参考 官方文件,其中特别值得注意的是 --no-update 参数。
新增模块至 dev-dependencies
有些模块,比如 pytest 、 black 等等,只会在开发环境中使用,产品的部署环境并不需要。 Poetry 允许你区分这两者,将上述的模块安装至 dev-dependencies 区块,方便让你轻松建立一份「不包含」 dev-dependencies 开发模块的安装清单。 在此以 Black 为例,安装方式如下:
poetry add black --group dev
结果的区别显示在 pyproject.toml 里:
python = "^3.10"
flask = "^2.3.2"
[tool.poetry.group.dev.dependencies]
black = "^23.7.0"
可以看到 black 被列在不同区块: tool.poetry.dev-dependencies 。
强烈建议善用 dev-dependencies
善用 --group dev 参数,明确区分开发环境,我认为非常必要。
首先,这些模块常常属于「检测型」工具,相关的依赖模块着实不少!比如 flake8 ,它依赖了 pycodestyle 、 pyflakes 、 mccabe 等等,还有 black 、 pre-commit ,依赖模块数量也都很可观。
Poetry 更新模块
这个就很简单了,使用 poetry update 指令即可:
poetry update
上面指令会更新全部可能可以更新的模块,也可以仅指定特定模块,比如:
poetry update requests toml
关于 poetry update 的其余参数,请参考文件。
还一件重要的事,那就是关于模块版本的升级限制规则,取决于你在 pyproject.toml 中的设定。
列出全部模块清单
poetry show
树状显示依赖层
poetry show --tree
也可以指定模块显示
poetry show celery --tree
删除模块
poetry remove celery
导出poetry 虚拟环境requirements.txt
poetry export -f requirements.txt -o requirements.txt --without-hashes
- 导出dev的包
poetry export -f requirements.txt -o requirements-dev.txt --without-hashes --dev
添加阿里云源
poetry source add aliyun https://mirrors.aliyun.com/pypi/simple