跳至内容

Python 项目 (pyproject.toml)

Rye 试图避免在 pyproject.toml 文件中使用大量的专有配置,但一些配置是必要的。以下是 Rye 预期使用的最重要的键。

project.dependencies

此键用于管理依赖项。它们的工作方式与你在普通 pyproject.toml 文件中期望的一样,事实上 Rye 对此没有任何改变。但是,Rye 能够使用 rye addrye remove 命令修改这些条目。

[project]
dependencies = [
    "mkdocs~=1.4.3",
    "mkdocs-material~=9.1.12",
    "pymdown-extensions~=9.11",
]

project.scripts

此键指定要在 sync 期间生成并安装到虚拟环境中的脚本。这些脚本将调用配置的入口点。

[project.scripts]
my-hello-script = 'hello:main'
此配置将生成一个脚本 my-hello-script,它将调用 hello 模块的 main 函数。

可以使用 rye sync 安装脚本,并使用 rye run 运行它们。

$ rye sync
$ rye run my-hello-script
Hello from hello!

tool.rye.dev-dependencies

这与 project.dependencies 类似,但它保存的是仅用于开发的依赖项。这些依赖项可以通过 rye add --dev 自动添加。

[tool.rye]
dev-dependencies = ["black~=23.3.0"]

开发依赖项会自动安装,除非 sync 传递了 --no-dev 参数。

tool.rye.excluded-dependencies

这是一个特殊键,它包含永远不会安装的依赖项,即使它们被作为间接依赖项拉取。这些依赖项会通过 rye add --excluded 自动添加。

[tool.rye]
excluded-dependencies = ["cffi"]

tool.rye.universal

0.36.0 中新增

当启用此标志时,项目或工作区中的所有 locksync 操作都将像传递了 --universal 参数一样运行。这意味着依赖项解析器将尝试生成一个在所有平台、操作系统和体系结构上都有效的解析结果,而不是一个特定于当前平台的解析结果。

[tool.rye]
universal = true

tool.rye.generate-hashes

0.35.0 中新增

当启用此标志时,项目或工作区中的所有 locksync 操作都将像传递了 --generate-hashes 参数一样运行。这意味着所有锁定文件中的所有依赖项都将包含哈希值。

[tool.rye]
generate-hashes = true

tool.rye.lock-with-sources

0.18.0 中新增

当启用此标志时,项目或工作区中的所有 locksync 操作都将像传递了 --with-sources 参数一样运行。这意味着所有锁定文件都包含完整的源引用。请注意,如果源包含 URL 中的凭据,这可能会创建包含凭据的锁定文件。

[tool.rye]
lock-with-sources = true

tool.rye.managed

0.3.0 中新增

此键告诉 rye 此项目应该由 Rye 管理。此键主要影响虚拟环境的一些自动创建。例如,Rye 不会尝试在没有此标志的情况下使用 shims 初始化虚拟环境。它可以在全局配置中强制启用。

[tool.rye]
managed = true

tool.rye.virtual

0.20.0 中新增

如果此键设置为 true,则项目被声明为虚拟项目。这是一种特殊模式,其中不会安装包本身,只会安装依赖项。例如,如果你没有创建 Python 项目,但依赖于 Python 软件,这将很有用。例如,你可以使用它来安装用 Python 编写的软件。当使用 --virtual 标志调用 rye init 时,此键将设置为 true。

[tool.rye]
virtual = true

有关更多信息,请参阅 虚拟项目指南

tool.rye.sources

这是一个包含应用于查找依赖项的源的表的数组。这使你可以使用 PyPI 之外的索引。这些源也可以在主 config.toml 配置文件中使用相同的语法进行配置。

[[tool.rye.sources]]
name = "default"
url = "https://pypi.ac.cn/simple/"

有关配置源的更多信息,请参阅 依赖项来源

tool.rye.scripts

此键可用于注册通过 rye run 公开自定义脚本。每个键都是一个脚本,每个值都是该脚本的配置。通常,值是一个包含不同键的对象,其中最重要的键是 cmd,它包含要执行的命令。但是,如果只设置 cmd,则对象是可选的。cmd 本身可以设置为字符串或参数数组。

[tool.rye.scripts]
# These three options are equivalent:
devserver = "flask run --app ./hello.py --debug"
devserver-alt = ["flask", "run", "--app", "./hello.py", "--debug"]
devserver-explicit = { cmd = "flask run --app ./hello.py --debug" }

脚本可以使用以下键:

cmd

要执行的命令。它可以是 stringarray 的参数。在这两种情况下,shell 特定的插值都不可用。如果虚拟环境中有该命令,则该命令将调用它。

[tool.rye.scripts]
devserver = { cmd = "flask run --app ./hello.py --debug" }
http = { cmd = ["python", "-mhttp.server", "8000"] }

env

此键可用于为脚本提供环境变量。

[tool.rye.scripts]
devserver = { cmd = "flask run --debug", env = { FLASK_APP = "./hello.py" } }

env-file

0.30.0 中新增

这与 env 类似,但它不是直接设置环境变量,而是指向应加载的文件(相对于 pyproject.toml)。

[tool.rye.scripts]
devserver = { cmd = "flask run --debug", env-file = ".dev.env" }

chain

这是一个特殊键,可以设置它而不是 cmd,以使命令调用多个其他命令。每个命令将依次执行。如果任何命令失败,其余命令将不会执行,并且链会失败。

[tool.rye.scripts]
lint = { chain = ["lint:black", "lint:flake8" ] }
"lint:black" = "black --check src"
"lint:flake8" = "flake8 src"

call

这是一个特殊键,可以设置它而不是 cmd,以使命令调用 Python 函数或模块。格式是以下三种格式之一:

  • <module_name>:等效于 python -m <module_name>
  • <module_name>:<function_name>:运行 <module_name> 中的 <function_name> 并使用返回值退出。
  • <module_name>:<function_name>(<args>):向函数传递特定参数。

命令行上提供的额外参数将传递到 sys.argv 中。

[tool.rye.scripts]
serve = { call = "http.server" }
help = { call = "builtins:help" }
hello-world = { call = "builtins:print('Hello World!')" }

tool.rye.workspace

当存储包含该键的表时,则该项目被声明为 工作区 根目录。默认情况下,在子文件夹中发现的所有 Python 项目将成为该工作区的成员,并共享一个虚拟环境。可选地,members 键(一个数组)可用于限制这些成员。在该列表中可以使用通配符。根项目本身始终是成员。

[tool.rye.workspace]
members = ["mylib-*"]

有关更多信息,请参阅 工作区指南