前言

第一次在PyPI上传Python包,记录一下整个流程

注册账号

  1. 注册账号

  2. 开启2FA功能(强制进行的步骤)

    按照引导将生成的任意一个Recovery-Codes填入

  3. 添加验证

    需要用户通过Add 2FA with authentication application,可以直接使用pyotp完成二次验证

    pyotp是用于二次验证的包

    1
    pip install pyotp
    1
    2
    3
    4
    5
    6
    import pyotp
    # 复制填入你的Key
    key = 'yourkey here'
    totp = pyotp.TOTP(key)
    # Key会直接打印
    print(totp.now())

    将生成的Key填入即可成功。

  4. 生成API tokens

    找到Account settings下的API tokensAdd API token按照流程走即可

  5. 生成配置文件

    按照不同的方法在本地设置验证,如使用wgets按照要求在C:\Users\用户名目录下添加一个.pypirc文件,写入要求写入的信息

项目结构

创建模块同名文件夹,以biliemoji为例

1
2
3
4
5
6
7
8
biliemoji
├─ biliemoji
│ ├─ __init__.py
│ ├─ download.py
│ ├─ dress.py
│ └─ emoji.py
├─setup.py
└─README.md
  • 在文件的同名文件下将所有的py文件放入
  • 在根目录下创建setpu.py
  • README.md - 相关说明(可选)

setup.py模板如下:

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
36
37
38
import codecs
import os
from setuptools import setup, find_packages

# these things are needed for the README.md show on PyPI
# 如果不需要README,将虚线内代码删除
# ---------------------------
here = os.path.abspath(os.path.dirname(__file__))

with codecs.open(os.path.join(here, "README.md"), encoding="utf-8") as fh:
long_description = "\n" + fh.read()
# ---------------------------

VERSION = '1.0.1'
DESCRIPTION = 'A simple Python library for accessing bilibili emojis and dresses.'
LONG_DESCRIPTION = 'A simple Python library for accessing bilibili emojis and dresses.'

# Setting up
setup(
name="biliemoji",
version=VERSION,
author="gcnanmu",
author_email="",
description=DESCRIPTION,
long_description_content_type="text/markdown",
long_description=long_description,
packages=find_packages(),
install_requires=[],
keywords=['python','bilibili'],
classifiers=[
"Development Status :: 1 - Planning",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3.11",
"Operating System :: Unix",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
]
)

修改VERSIONDESCRIPTIONLONG_DESCRIPTION等字段,classifiers字段为PyPI右侧的信息栏。

测试

修改后终端运行

1
python setup.py develop

会生成biliemoji.egg-info文件夹(不用管)

新建一个Python文件,尝试进行导入测试,验证功能正常

打包

测试完成后,终端运行

1
python setup.py sdist

生成一个包含压缩包的dist文件夹,例如biliemoji-1.0.1.tar.gz,压缩包即为要上传到PyPI的文件。

上传

安装twine

1
pip install twine

之后运行

1
twine upload dist/*

等待上传成功

  1. 无法上传重复版本号的包
  2. 如果没设置.pypirc,需要手动输入Token

参考资料

  1. 官方教程:最小的结构 — Python Packaging Tutorial
  2. Python打包和上传到PyPI - cornradio的技术博客
  3. PyPI 上传python包_PyPI上传包-CSDN博客