日常 Python 开发过程中,总是少不了需要连接测试数据库,发送接口请求,下载上传文件等等。
如果我们仅有一个项目需要执行这些操作,那把他们封装成公共方法放在本地的 utils 目录下固然可行,但实际上往往会有多个项目需要执行这些操作。
那么更好的方式是:把他们打成一个 Python 包,上传到公司的私有源中,需要使用的项目通过 pip install 安装即可。其优点不言而喻。
Python 打包发布方式
Python 传统的打包发布方式是通过手动配置 setup.py
、setup.cfg
文件,然后使用 setuptools
进行打包,最后借助 twine
进行发布包到 pypi 。
作为热衷于偷懒的 Pythonista,必然要寻求更高效的打包发布方式。
于是新一代的包管理工具 Poetry 应运而生。
Poetry 简介
Poetry 拥有三大核心用途:
- Develop(依赖管理、Python 虚拟环境)
- Build(打包)
- Publish(发布)
Poetry 打包并发布到公司 pypi 私有源
使用 Poetry
我们可以很方便地创建 Python 项目(poetry new
),或是在原项目中引入 Poetry
(poetry init
),这里不再赘述。
打包
当你的项目使用了 Poetry
后,在根目录下会有一个名为 pyproject.toml
的文件,里面以 TOML
格式记录了当前项目打包后的基础信息。打包前,我们需要对其稍作修改。
以自研测试库为例(poetry 1.4):
[tool.poetry]
name = "spindlet"
version = "1.0.0"
description = ""
authors = [""]
license = "MIT"
readme = "README.md"
homepage = ""
repository = ""
classifiers = [
"Programming Language :: Python :: 3.12",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
packages = [
{ include = "spindlet", from="src" }
]
[tool.poetry.dependencies]
...
[tool.poetry.dev-dependencies]
...
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[[tool.poetry.source]]
name = "xxx"
url = "http://pypi.xxx.com/dev/pypi/+simple/"
default = true # 强制使用私有源
主要需要注意:
-
添加一个 license,可参考 如何选择开源许可证。
LICENSE
文件可在 GitLab 上生成; -
设置
packages
,微业贷测试基础库的结构如下:we-x | - src | - we_x
include
设置为最终需要进行打包的目录,即we_x
;from
设置为we_x
相对于根目录所在的目录,即src
。 -
由于无法访问外网,在文件最底部的
[[tool.poetry.source]]
设置私有源信息。
修改完后执行 Poetry
打包命令
poetry build
成功后,根目录下会生成包括 dist
在内的几个文件夹,dist
目录下即是打好的包文件。后续将发布到公司 pypi 私有源。
发布
公司的私有源基于 devpi 部署,在发布包之前需要获取 devpi
的用户名和密码,目前私库主要使用 dev
用户进行发布。dev
用户及其索引已在私有源创建,获得密码后可以直接进行发布操作。
发布过程极为简单:
-
配置
Poetry
仓库信息:poetry config repositories.dev "http://pypi.weoa.com/dev/pypi"
执行结束,可通过
poetry config --list
查看配置结果。 -
通过
dev
用户和密码执行发布操作:poetry publish -r dev -u dev -p dev的密码
打开 http://pypi.weoa.com/dev/pypi 可以查看到发布成功的包。