Poetry安装和使用

2023/11/02 Python 共 6921 字,约 20 分钟

pyproject.toml 是啥?

pyproject.toml 是一种配置文件,通常用于定义 Python 项目的元数据、依赖项和构建配置。它是 Python PEP 518 的一部分,用于指定构建工具(如 pip)应该如何构建项目。

一些常见的用途包括:

  1. 项目元数据: 包括项目名称、版本、作者等信息。
  2. 构建系统配置: 指定构建工具和插件。
  3. 依赖项管理: 定义项目的依赖项,包括依赖项的版本。
  4. 其他配置: 包括其他项目特定的配置选项。

示例 pyproject.toml 文件可能如下所示:

tomlCopy code
[tool.poetry]name = "myproject"version = "0.1.0"description = "My Python project"authors = ["Your Name autolinkyour.email@example.comautolink"]

[build-system]requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"[tool.poetry.dependencies]python = "^3.8"requests = "^2.26.0"[tool.poetry.dev-dependencies]pytest = "^7.2.2"

这个文件是由 Poetry 构建工具使用的,但其他一些工具(如 flitsetuptools 等)也可以使用类似的文件进行配置。

使用这个相较于传统的 pip 有啥优点呢?

使用 Poetry 相对于传统的 piprequirements.txt 有一些优点:

  1. 统一管理依赖关系: Poetry 通过 pyproject.toml 文件统一管理项目的依赖关系,包括开发依赖和运行时依赖。这简化了依赖管理,减少了手动编辑 requirements.txt 的需要。
  2. 锁定依赖版本: Poetry 生成一个 poetry.lock 文件,用于锁定项目中所有依赖项的版本。这确保了在不同环境中安装相同的软件包版本,从而减少了由于依赖项不一致而导致的问题。
  3. 语义版本控制: Poetry 支持语义版本控制,允许您在项目中使用 ^~ 等符号,从而更容易指定依赖项的最低版本。
  4. 自动化构建: Poetry 提供了一个简化的构建工具,可以方便地构建和发布 Python 项目。它也与一些 CI/CD 工具集成得很好。
  5. 用户友好的 CLI: Poetry 的命令行界面(CLI)是用户友好的,提供了一组简单而强大的命令,使得创建、构建、测试和发布项目变得容易。
  6. 文档和社区支持: Poetry 有详细的文档,社区支持也较为活跃,可以在 GitHub 上找到有关 Poetry 的详细信息和问题解答。

总的来说,Poetry 提供了更现代、更一致的方式来管理 Python 项目的依赖关系和构建过程。

示例

[tool.poetry]
name = "python-template"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]

[tool.poetry.dependencies]
python = ">=3.10.0,<3.11"
replit = "^3.2.4"
Flask = "^2.1.3"
baseopensdk = {url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lmeh7phbozvhoz/base-open-sdk/baseopensdk-0.0.12-py3-none-any.whl"}

[tool.poetry.dev-dependencies]
debugpy = "^1.6.2"
replit-python-lsp-server = {extras = ["yapf", "rope", "pyflakes"], version = "^1.5.9"}
toml = "^0.10.2"

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

配置

poetry config

poetry config –list

(backend-py3.12) PS D:\Desktop\frontend\screenshot-to-code\backend> poetry config --list
cache-dir = "C:\\Users\\zz\\AppData\\Local\\pypoetry\\Cache"
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
plugins.pypi_mirror.url = "https://mirrors.cloud.tencent.com/pypi/simple/"
repositories.PyPI.url = "https://mirrors.cloud.tencent.com/pypi/simple/"
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}\\virtualenvs"  # C:\Users\zz\AppData\Local\pypoetry\Cache\virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
warnings.export = true

poetry config virtualenvs.in-project true

在当前项目下创建虚拟环境

经过设置之后,确实在当前项目下生成 venv 文件了,牛逼。

我们可以使用 poetry config --list 指令来查看 poetry 的几个主要设定,

X:\poetry-demo>poetry config --list
cache-dir = "C:\\Users\\xxp\\AppData\\Local\\pypoetry\\Cache"
experimental.new-installer = true
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "C:\\Users\\xxp\\AppData\\Local\\pypoetry\\Cache\\virtualenvs"
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
X:\poetry-demo>poetry config --list
cache-dir = "C:\\Users\\xxp\\AppData\\Local\\pypoetry\\Cache"
experimental.new-installer = true
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "C:\\Users\\xxp\\AppData\\Local\\pypoetry\\Cache\\virtualenvs"
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"

其中 virtualenvs.create = true 若改为 false ,则可以停止 poetry 在检查不到虚拟环境是自动创建的行为模式,但是建议不要改动。

virtualenvs.in-project = false 就是我们要修改的目标,使用指令:

poetry config virtualenvs.in-project true
poetry config virtualenvs.in-project true

先把之前创建的虚拟环境删除

X:\poetry-demo>poetry env remove python
Deleted virtualenv: C:\Users\xxp\AppData\Local\pypoetry\Cache\virtualenvs\poetry-demo-Ut74gzEx-py3.10
X:\poetry-demo>poetry env remove python
Deleted virtualenv: C:\Users\xxp\AppData\Local\pypoetry\Cache\virtualenvs\poetry-demo-Ut74gzEx-py3.10

重新创建虚拟环境,看一下差异:

X:\poetry-demo>poetry env use python
Creating virtualenv poetry-demo in X:\poetry-demo\.venv
Using virtualenv: X:\poetry-demo\.venv
X:\poetry-demo>poetry env use python
Creating virtualenv poetry-demo in X:\poetry-demo\.venv
Using virtualenv: X:\poetry-demo\.venv

可以看出:

  • 虚拟环境的路径改为项目的根目录下了
  • 名称固定位 .venv

个人觉得这样的设定更加简洁。

现在可以了。

使用

poetry show

很优美!!

poetry show –tree

poetry env

poetry env use

Creating virtualenv backend-2aBuY-DE-py3.12 in C:\Users\zz\AppData\Local\pypoetry\Cache\virtualenvs

Using virtualenv: C:\Users\zz\AppData\Local\pypoetry\Cache\virtualenvs\backend-2aBuY-DE-py3.12

然后呢?

一旦你使用 poetry env use 命令指定了 Python 解释器,Poetry 会为你的项目创建一个虚拟环境,并使用指定的 Python 版本。接下来,你可以在该虚拟环境中执行其他的 Poetry 命令,比如安装项目的依赖项。

在你的例子中,你已经指定了 Python 3.12,并且虚拟环境已经被创建。接下来,你可以运行以下命令安装项目的依赖项:

poetry install

这将使用指定的 Python 版本创建虚拟环境,并安装项目中指定的依赖项。如果这是一个新的 Poetry 项目,它会读取 pyproject.toml 文件中的依赖项信息,并为项目安装这些依赖项。

完成后,你的项目应该准备好运行了。你可以使用 Poetry 提供的其他命令来运行、测试和构建你的项目。例如:

bashCopy code
poetry run <your-command>

其中 <your-command> 是你希望在虚拟环境中执行的命令。

希望这对你有帮助!如果有其他问题,请随时问。

poetry env list

查看都有哪些虚拟环境

poetry env remove

poetry install

poetry shell 什么意思?

poetry shell 是 Poetry 提供的一个命令,用于激活当前项目的虚拟环境。在 Python 开发中,虚拟环境是一种隔离项目依赖的方式,以确保每个项目都有其独立的 Python 环境。

使用 poetry shell 命令,Poetry 会自动激活当前项目的虚拟环境,这样你可以在项目中执行命令,而这些命令将在虚拟环境中运行。这有助于隔离项目的依赖,防止与其他项目或系统的依赖发生冲突。

具体来说,执行以下命令:

bashCopy code
poetry shell

这将:

  1. 检查项目中是否存在虚拟环境。如果不存在,Poetry 将创建一个虚拟环境。
  2. 激活虚拟环境,将命令行提示符更改为虚拟环境中的提示符。
  3. 你可以在这个虚拟环境中运行 Python 解释器、安装依赖、执行脚本等。

在虚拟环境中,你可以执行项目中的命令而无需在每个命令前面添加 poetry run。当你退出虚拟环境(通过 exit 或关闭终端窗口)时,你将返回到原来的环境。

这有助于确保你在开发和运行项目时使用了正确的依赖项,而不会受到其他项目或全局 Python 环境的影响。

下载

在安装了 pipx 的基础上,沃安装了 poetry

最新的安装方式

https://blog.csdn.net/weixin_43422210/article/details/129149703

换源

下面的我还没试哈,反正记得把代理关了

哥们试玩了,成功了:

(注)如果有 git,直接执行这个命令就会自动完成安装插件和换源:git clone **https://github.com/waketzheng/carstino** && python carstino/pip_conf.py –poetry

  1. 安装插件(https://github.com/arcesium/poetry-plugin-pypi-mirror)
  • 方法一:使用 pipx
pipx inject poetry poetry-plugin-pypi-mirror
  • 方法二:使用 poetry self
poetry self add poetry-plugin-pypi-mirror
  • 注:这两个方法的卸载命令分别是 pipx runpip poetry uninstall xxxpoetry self remove xxx
  1. 按照插件文档修改默认源
  • 方法一:改配置文件 新建或修改配置文件 config.toml,增加如下内容 (该 toml 文件路径是:Linux 系统在 ~/.config/pypoetry/,Windows 在 %APPDATA%\pypoetry\,Mac 在 ~/Library/Preferences/pypoetry/)
    • 注:更改 url 的值即可换用其他镜像源
  • 方法二:环境变量

export POETRY_PYPI_MIRROR_URL=https://mirrors.cloud.tencent.com/pypi/simple/

	修改为清华镜像源
	```
poetry source add tsinghua https://pypi.tuna.tsinghua.edu.cn/simple

poetry source add tsinghua [https://pypi.tuna.tsinghua.edu.cn/simple](https://pypi.tuna.tsinghua.edu.cn/simple)

![](/images/GgQhbdtemoYuiBxtoz8cfdLhnvd.png)
会在这里加

```

文档信息

Search

    Table of Contents