怎么用 python 写「诗」:使用 poetry 打包和提交 package

·
默认分类 no tag September 26, 2022

在引入基于 pyproject.toml 的构建之前,pip 只支持使用安装包 setup.py文件利用 setuptools 进行构建

setup.py (legacy) - pip documentation v22.2.2

Packaging Python Projects - Python Packaging User Guide 最开始按照这个教程来打包和发布,但是遇到了 build 失败,依赖无法解析的问题。

现在新版的 PEP 开始推荐利用 prproject.toml 把包括 setup.py, setyp.cfg, requirements.txt 等文件信息全部融合在一起了 (理论上简单了一些)

pyproject.toml - pip documentation v22.2.2

不过即使用 pyproject.toml , 直接使用 python -m build 还是遭遇了建立虚拟环境 venv 过程中没法安装 pymatgen 的问题. 这一方面有一个原因是 pymatgen 的依赖确实太多了.

最后选择使用 poetry 来实现完整的构建和发布的过程. 包发布在了 pyw90

https://github.com/python-poetry/poetry

关于 poetry 的介绍

非常详细的对于 poetry 的介绍见 Python依赖管理及打包利器-Poetry - 掘金, 基本把官网文档内容都涵盖到了. 另一个同样非常详细的关于 poetry 的介绍, 见 相比 Pipenv,Poetry 是一个更好的选择 - 知乎

在写好整个 package 的 pyproject.toml 以后, 文件夹的目录应该如下所示

foo
├── pyproject.toml
├── README.rst
├── foo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_foo.py

pyproject.toml 文件到底该怎么写

官方文档已经把所有条目都列清楚了,可以对照着一条一条查看

https://python-poetry.org/docs/pyproject/

Poetry 里对版本号的要求写法还挺不一样的,具体见 Dependency specification | Documentation | Poetry - Python dependency management and packaging made

零散内容记录

使用 poetry 以后该怎么写 setup.py

因为使用 poetry 以后, 理论上所有的信息都在 pyproject.toml 文件里了, 也就没有平常可以使用的直接本地安装的 setup.py 文件. 如果单独把信息复制一份, 显然不好管理, 也不甚合适. 在 StackOverflow 看到如下的一个解决方案, 还是十分 nice 的.

#!/usr/bin/env python

import setuptools

if __name__ == "__main__":
    setuptools.setup()

https://stackoverflow.com/questions/62983756/what-is-pyproject-toml-file-for

提升 poetry 依赖下载速度: 替换镜像源

https://greyli.com/set-pypi-mirror/

在 pyproject.toml 中添加

[[tool.flit.source]]
name = "aliyun-mirror"
url = "https://mirrors.aliyun.com/pypi/simple/"

使用 miniconda + poetry

在两者一起使用的时候,可能会遇到虚拟环境到底由哪个管理器来管理的问题。这里推荐还是使用 conda,最要命的一点因为 conda 可以在环境中指定不同的 python 版本。这就需要去把 poetry 的创建虚拟环境关掉

poetry config virtualenvs.create false

conda和poetry混合使用会有什么问题? - 知乎

配置 pypi 账号和密码登陆

Poetry 的配置存储在单独的文件中,比 Pipenv 设置环境变量的方式要方便一点。配置通过 poetry config 命令设置,比如下面的命令可以写入 PyPI 的账号密码信息:

$ poetry config http-basic.pypi username password

一开始构建的小 bug:不能使用相对路径 import

https://github.com/python-poetry/poetry/issues/1580

Use relative import from .config import Config or better absolute import from testmodule.config import Config

  • 近年文章汇总
  • 从零开始的 Conda 重开之旅
取消回复

说点什么?
Title
使用 poetry 以后该怎么写 setup.py
提升 poetry 依赖下载速度: 替换镜像源
使用 miniconda + poetry
配置 pypi 账号和密码登陆
一开始构建的小 bug:不能使用相对路径 import

© 2025 满园 - BASE. Using Typecho & Moricolor. 京公网安备 11010802040705号. 京ICP备2022027795号.