当前位置:   article > 正文

Python 新规范 pyproject.toml 完全解析

pyproject.toml

多谢:thank

PythonPEP 518开始引入的使用pyproject.toml管理项目元数据的方案。

该规范目前已经在很多开源项目中得以支持:

  • Django 这个 Python 生态的顶级项目在 5 个月之前开始使用 pyproject.toml
  • Pytest 这个 Python 生态测试框架的领头羊在 4 个月之前开始使用 pyproject.toml
  • SciPy 这机器学习的库也在 3 周前切到了 pyproject.toml
  • poetry包管理可以直拉生成toml文件

pyproject.toml 实践

工程结构

PyPI 的旧时代的因为规范太松散了,每个项目的结构都五花八门。现在好了,pyproject.toml 它在 Python 项目的结构上都有一个推荐风式了。假设我们软件包的名字是 npts ,那么整个项目的目录结构在推荐的风格下看起来应该像这样。

假设我们软件包的名字是 npts ,那么整个项目的目录结构在推荐的风格下看起来应该像这样。

  1. tree ./ ./
  2. ├── LICENSE
  3. ├── README.md
  4. ├── pyproject.toml
  5. ├── src
  6. │ └── npts # src 下面是包名,包下面是业务代码
  7. │ ├── __init__.py
  8. | └── core.py
  9. └── tests 3 directories, 5 files
3 directories, 5 files

简单地在 src/npts/core.py 加一个函数,模拟我们的业务逻辑。

  1. # -*- coding: utf8 -*-
  2. def hello(name: str = "world"):
  3. return f"hello {name} ."

pyproject.toml

  1. [project]
  2. name = "npts"
  3. version = "0.0.1"
  4. [build-system]
  5. requires = ["hatchling"]
  6. build-backend = "hatchling.build"

安装 build 依赖并用 build 来打包

  1. # 安装依赖
  2. python3 -m pip install --upgrade build
  3. # 打包
  4. python3 -m build
  5. # ...
  6. #... ... Successfully built npts-0.0.1.tar.gz and npts-0.0.1-py2.py3-none-any.whl
  • 编译过程中,会产生如下的输出信息:

  • 该命令执行完后,会在dist目录中生成如下红框内的文件:

其中,tar.gz文件是源发行版a source distribution ,而.whl文件是构建发行版a built distribution

把打包好的软件包上传到 PyPI

  1. twine upload dist/npts-0.0.1-py3-none-any.whl
  2. poetry -m publish #上传发布

安装包

pip3 install npts

pyproject.toml 完整参数说明

  1. [tool.poetry] # 是最基本的section,然后它由多个 sections 组成
  2. name #package 名字,必填
  3. version #package 版本号 ,必填
  4. description #package 描述 ,必填
  5. license #package 许可证,可选
  6. authors #package 作者,必填
  7. maintainers #package 维护者,可选
  8. readme #package readme 文件,可选
  9. README.rst 或 README.md
  10. homepage #package 项目网站的 URL,可选
  11. repository #package 指向项目 repository 的 URL,可选
  12. documentation #package 项目文档的 URL,可选
  13. keywords #与 package 相关的关键字列表(最多5个),可选
  14. [dependencies] and [dev-dependencies]
  15. # 默认情况下,poetry 会从 Pypi 库中查找依赖项,只需要写名称、版本就行了
  16. [tool.poetry.dependencies]
  17. python = "^3.9" # 重点:必须声明与包兼容的python版本 python = "^3.9"
  18. requests = "^2.26.0"
  19. [[tool.poetry.source]] # 使用私有存储库
  20. name = 'private'
  21. url = 'http://example.com/simple'
  22. [extras] #支持可选依赖项
  23. ...
  24. [tool.poetry.dependencies] # 这些软件包是强制性的
  25. mandatory = "^1.0"
  26. psycopg2 = { version = "^2.7", optional = true } # 可选依赖项列表,可自行选择安装哪些
  27. mysqlclient = { version = "^1.3", optional = true }
  28. [tool.poetry.extras]
  29. mysql = ["mysqlclient"]
  30. pgsql = ["psycopg2"]
当需要安装可选依赖库时
poetry install --extras "mysql pgsql" poetry install -E mysql -E pgsql
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/505873
推荐阅读
相关标签
  

闽ICP备14008679号