由pyproject.toml引发的讨论

前言

今天在搜集数据集的时候遇到了pyproject.toml配置文件,点开来一看发现有许多依赖包和配置信息,查找资料一看,还可以用pyproject.toml进行依赖包管理。

pyproject.toml文件

该文件的部分由多个部分组成。tool.poetry pyproject.toml

以项目<''https://github.com/tiangolo/fastapi/blob/master/pyproject.toml"> fastapi 的pyproject为例,介绍一下pyproject.toml的组成部分:

这告诉像pip这样的工具用flit构建你的项目。这是 PEP 517 定义的标准。对于任何使用Flit的新项目。

[build-system]
requires = ["flit"]
build-backend = "flit.buildapi"

发布包的一些信息,作者,首页等等、。

[tool.flit.metadata]
module = "fastapi"
author = "Sebastián Ramírez"
author-email = "tiangolo@gmail.com"
home-page = "https://github.com/tiangolo/fastapi"

发布到pypi上的分类信息,require字段是此包所需的 PyPI 中的其他包的列表。

[tool.flit.metadata]
# ...
classifiers = [
    "Intended Audience :: Information Technology",
    "Intended Audience :: System Administrators",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python",
    "Topic :: Internet",
    "Topic :: Software Development :: Libraries :: Application Frameworks",
    "Topic :: Software Development :: Libraries :: Python Modules",
    "Topic :: Software Development :: Libraries",
    "Topic :: Software Development",
    "Typing :: Typed",
    "Development Status :: 4 - Beta",
    "Environment :: Web Environment",
    "Framework :: AsyncIO",
    "Framework :: FastAPI",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3 :: Only",
    "Programming Language :: Python :: 3.6",
    "Programming Language :: Python :: 3.7",
    "Programming Language :: Python :: 3.8",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Topic :: Internet :: WWW/HTTP :: HTTP Servers",
    "Topic :: Internet :: WWW/HTTP",
    requires = [
    "starlette==0.19.1",
    "pydantic >=1.6.2,!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0",
	]
	description-file = "README.md"
	requires-python = ">=3.6.1"
]

除了基本 url (和 ) 之外,您还可以在该部分中指定任何自定义 URL项目路径。项目的 URL,例如其 Github 存储库。

[tool.flit.metadata.urls]
Documentation = "https://fastapi.tiangolo.com/"

可选依赖项,用于增强包,但不是必需的,包含着一些测试环境的依赖等等。每个可选功能所需的包列表。这些要求的指定格式与指定的格式相同。

[tool.flit.metadata.requires-extra]
test = [
    "pytest >=6.2.4,<7.0.0",
    "pytest-cov >=2.12.0,<4.0.0",
    "mypy ==0.910",
    "flake8 >=3.8.3,<4.0.0",
    "black == 22.3.0",
    "isort >=5.0.6,<6.0.0",
    "requests >=2.24.0,<3.0.0",
    "httpx >=0.14.0,<0.19.0",
    "email_validator >=1.1.1,<2.0.0",
    "sqlalchemy >=1.3.18,<1.5.0",
    "peewee >=3.13.3,<4.0.0",
    "databases[sqlite] >=0.3.2,<0.6.0",
    "orjson >=3.2.1,<4.0.0",
    "ujson >=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0",
    "python-multipart >=0.0.5,<0.0.6",
    "flask >=1.1.2,<3.0.0",
    "anyio[trio] >=3.2.1,<4.0.0",

    # types
    "types-ujson ==4.2.1",
    "types-orjson ==3.6.2",
    "types-dataclasses ==0.6.5; python_version<'3.7'",
]
doc = [
    "mkdocs >=1.1.2,<2.0.0",
    "mkdocs-material >=8.1.4,<9.0.0",
    "mdx-include >=1.4.1,<2.0.0",
    "mkdocs-markdownextradata-plugin >=0.1.7,<0.3.0",
    # TODO: upgrade and enable typer-cli once it supports Click 8.x.x
    # "typer-cli >=0.0.12,<0.0.13",
    "typer >=0.4.1,<0.5.0",
    "pyyaml >=5.3.1,<7.0.0",
]
dev = [
    "python-jose[cryptography] >=3.3.0,<4.0.0",
    "passlib[bcrypt] >=1.7.2,<2.0.0",
    "autoflake >=1.4.0,<2.0.0",
    "flake8 >=3.8.3,<4.0.0",
    "uvicorn[standard] >=0.12.0,<0.18.0",
    "pre-commit >=2.17.0,<3.0.0",
]
all = [
    "requests >=2.24.0,<3.0.0",
    "jinja2 >=2.11.2,<4.0.0",
    "python-multipart >=0.0.5,<0.0.6",
    "itsdangerous >=1.1.0,<3.0.0",
    "pyyaml >=5.3.1,<7.0.0",
    "ujson >=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0",
    "orjson >=3.2.1,<4.0.0",
    "email_validator >=1.1.1,<2.0.0",
    "uvicorn[standard] >=0.12.0,<0.18.0",
]

安装软件包时,可以使用以下选项指定附加功能:-E|–extras

poetry install --extras "mysql pgsql"
poetry install -E mysql -E pgsql

Flit简化的python打包模块

Command options:
-f <path>, --ini-file <path>

指定要构建的模块的配置文件的路径。缺省值为 。pyproject.toml

--version

显示正在使用的 Flit 版本。

--help

在命令行界面上显示帮助。

--debug

显示有关 flit 正在执行的操作的更详细日志。

flit build

Build a wheel and an sdist (tarball) from the package.

--format <format>

限制为发布或 .通常应同时发布这两种格式。wheelsdist

--setup-py

在 sdist 中生成一个文件,以便可以通过旧版本的 pip 进行安装。setup.py

flit publish

Build a wheel and an sdist (tarball) from the package, and upload them to PyPI or another repository.用于上传到pypi上

--repository <repository>

要将包上载到的存储库的名称。应与 中的某个部分匹配。缺省值为 。~/.pypircpypi

--pypirc <pypirc>

要使用的 .pypirc 配置文件。缺省值为 。~/.pypirc

flit install

在系统上安装软件包。

默认情况下,软件包安装在Flit本身安装的同一Python环境中;使用 --python 或 FLIT_INSTALL_PYTHON 来覆盖它。

如果您没有修改环境的权限(例如Linux上的系统Python),Flit可以进行用户安装。使用 --user 或 --env 标志以一种或另一种方式强制这样做。

-s, --symlink

将模块符号链接到站点包中,而不是复制它,以便可以测试更改而无需重新安装模块。

 --deps <dependency option>

要安装的依赖项。、 、 或 之一。 并安装附加组件 、 和 。违约。all production develop none all developtest docdev all

--extras <extra[,extra,...]>

哪个命名了要为其安装依赖项的额外功能。指定安装所有可选依赖项或以逗号分隔的附加组件列表。缺省值取决于 。all–deps

--user

执行用户本地安装。如果 flit 不在 virtualenv 或 conda env 中(如果环境的库目录是只读的并且为 true),则这是默认设置。site.ENABLE_USER_SITE

--env

安装到环境中 - 与 --user 相反。这是 virtualenv 或 conda env 中的默认值(如果环境的库目录是可写的或 false)。site.ENABLE_USER_SITE

flit init

通过提示输入有关当前目录中模块的信息来创建新的配置文件。pyproject.toml

poetry

Poetry是Python中用于依赖管理和打包的工具。和flit及其类似,详见https://python-poetry.org/docs/

参考文章

https://www.jianshu.com/p/9fb0d69134d2
https://flit.pypa.io/en/latest/cmdline.html
https://python-poetry.org/docs/pyproject/
https://www.cnblogs.com/dongfangtianyu/p/14382420.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值