发布Python包到PyPI

发布Python包到PyPI是Python开发者分享自己代码的一种方式。最近写了个用LLM翻译arxiv论文的项目TransGPTex,第一次使用了python包的形式把这件事做了,而不是一个脚本。这样只要安装这个包,在任何目录都可以通过tgtex命令调用了,个人还是相当满意。

Python的强大之处在于其丰富的库,使用pip安装这些库非常方便。开发者可以将自己的代码打包成库,并上传到Python仓库供他人使用。这样在任何电脑上都可以通过pip install xxx迅速装好,很方便。

但之前没有发布包的经验,看了网上一篇很详细的教程:发布Python包到pypi之后弄好了。

在这里结合一下自身的感受,记录一下发布Python包到PyPI的详细步骤。

1. PyPI账号注册

到PyPI发布包首先需要有一个pypi的账号。

1.1 注册

访问PyPI官网进行注册。

1.2 开启两步验证

要上传自己的包,需要开启两步验证。那个什么USB验证好像要硬件的,我选了那个Time-based one-time password(也就是TOTP)认证。IOS好像可以用密码管理器扫码,但我是安卓手机,好像没有默认的TOTP密码管理器。

我选了aegis这个开源软件,只要扫码然后把那6位号码填入即可。这个6位号码是1分钟刷新一次,安全性比较强。

1.3 添加API Tokens

然后需要添加一个API Token,这个token要存下来,后面使用twine上传编译的whl要用。

一般Linux把api token存在~/.pypirc里,Windows的~目录是C:\Users\你的用户名,所以在该目录下新建一个.pypirc文件就行。

.pypirc文件内容是:

1
2
3
[pypi]
username = __token__
password = 申请的api token

2. 制作Python包

开发完库之后需要在外层配置一下setup.py,声明一下这个库的必需信息。

setup.py是Python包的核心文件,包含了包的详细信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import setuptools

from transgptex import __version__, __author__

with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()


setuptools.setup(
name="transgptex",
version=__version__,
author=__author__,
description="Translate Latex articles through LLM and compile them into PDF",
# 这个是项目页面的长描述
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/LiSheng2001/TransGPTex",
packages=setuptools.find_packages(),
include_package_data=True,
install_requires=[
# 所需的依赖
"openai",
"arxiv",
],
classifiers=[
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
],
entry_points={
# 入口位置
'console_scripts': [
'tgtex=transgptex.command_line:main',
]
},
)

3. 打包上传

之后就很简单,核心就是编译之后把.whl文件传上去就行了。

3.1 安装必要的打包工具库

1
pip install setuptools wheel twine

3.2 将编写的库安装测试

1
python setup.py develop

这个是可选的,就是在当前目录下安装这个包,然后本地开发就可以直接import package进去了。主要是用于测试包的行为是否符合预期。

3.3 打包成whl

1
python setup.py bdist_wheel

一旦3.2通过的话,就可以进行编译了。编译之后会在当前目录下生成个dist目录,里面是打包好的whl文件。

3.4 上传

1
twine upload dist/*

最后,使用twine上传包到PyPI。由于之前在~/.pypirc里面配置好token信息了,这里直接上传就行。

4. 使用

使用pip安装库后,即可直接使用。

1
2
3
pip install transgptex
# 查看帮助
tgtex -h

完成上述步骤之后,就已经完成一个python包的上传了。