Python 项目 (pyproject.toml
)
Rye 试图避免在 pyproject.toml
文件中使用大量的专有配置,但一些配置是必要的。以下是 Rye 预期使用的最重要的键。
project.dependencies
此键用于管理依赖项。它们的工作方式与你在普通 pyproject.toml
文件中期望的一样,事实上 Rye 对此没有任何改变。但是,Rye 能够使用 rye add
和 rye 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 中新增
当启用此标志时,项目或工作区中的所有 lock
和 sync
操作都将像传递了 --universal
参数一样运行。这意味着依赖项解析器将尝试生成一个在所有平台、操作系统和体系结构上都有效的解析结果,而不是一个特定于当前平台的解析结果。
[tool.rye]
universal = true
tool.rye.generate-hashes
在 0.35.0 中新增
当启用此标志时,项目或工作区中的所有 lock
和 sync
操作都将像传递了 --generate-hashes
参数一样运行。这意味着所有锁定文件中的所有依赖项都将包含哈希值。
[tool.rye]
generate-hashes = true
tool.rye.lock-with-sources
在 0.18.0 中新增
当启用此标志时,项目或工作区中的所有 lock
和 sync
操作都将像传递了 --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
要执行的命令。它可以是 string
或 array
的参数。在这两种情况下,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-*"]
有关更多信息,请参阅 工作区指南。