发布Python包到pypi

发布时间 2023-09-04 00:57:07作者: 天道酬勤DW

@

1. 概述

使用python 的其中一个原因就是因为python有众多强大的库,仅少量代码就可以实现非常强大的功能。

通常使用pip安装各种库,非常方便。

当然也可以把我们写的代码打包成库, 上传到python仓库,供其他开发者使用。

2. pypi 账号注册

2.1. 注册

https://pypi.org/account/register/

2.2. 开启两步验证

目前pyqi 加强安全要求,需要开启两步验证之后才允许使用。

可以使用 app密码管理器 或者 USB key,

我这里是用 IOS 密码管理器,直接选择 Add 2FA with authentication application.image.png

2.3. 添加API tokens

目前安全要求,上传包不允许直接使用账号密码(以前是可以的,网上大部分教程也是直接使用账号密码上传)image.png将API token 添加到用户目录下的.pypirc 文件中image.png

3. 制作python包

做个简单的python库,里面有四个文件,分别是setup.py、src/__init__.py、src/wqtool.py、README.md

3.1. setup.py

setup.py 是库的重点,里面详细描述库的信息,setuptools根据setup.py将库打包。

关键字请看:Keywords - setuptools 68.1.2.post20230829 documentation (pypa.io)

classifiers请看:Classifiers · PyPI

import os
from setuptools import setup
from setuptools import find_packages

with open(os.path.join(os.path.dirname(__file__), 'README.md')) as readme:
    README = readme.read()


VERSION = '0.1.1'

setup(
    name='wqtool',  # package name
    version=VERSION,  # package version
    description='wq tool',  # package description
    author='wwdeng',
    author_email='xx@gmail.com',
    install_requires=['Scons'],
    long_description=README,
    long_description_content_type='text/markdown',
    classifiers=[
        'Development Status :: 4 - Beta',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3.10',
        'Programming Language :: Python :: 3.9',
        'Programming Language :: Python :: 3.8',
    ],
    packages=find_packages(),
    zip_safe=False,
    entry_points={
        'console_scripts': [
            'wqtool = src.wqtool:main',
        ],
    }
)

3.2. src/__init__.py

__init__.py是个空文件,表明src是个包

3.3. src/wqtool.py

wqtool.py是我们发布的小功能实现文件,这里仅做个demo,简单的打印一个LOG。大家根据自己的需求实现自己需要的功能。

#!/usr/bin/env python

def main():
    print('wq tool')

if __name__ == '__main__':
    main()

3.4. README.md

README.md 用于描述这个库,在setup.py做为长描述使用

4. 打包上传

4.1. 安装必要的打包工具库

pip install setuptools wheel twine

setuptools 是打包工具, 是 distutils 增强版,不包括在标准库中。其扩展了很多功能,能够帮助开发者更好的创建和分发 Python 包。大部分 Python 用户都会使用更先进的 setuptools 模块。

wheel 库安装后可以打包成whl的包。Egg 格式是由 setuptools 在 2004 年引入,而 Wheel 格式是由 PEP427 在 2012 年定义。Wheel 的出现是为了替代 Egg,它的本质是一个zip包,其现在被认为是 Python 的二进制包的标准格式。

twine 用于上传包到pypi

4.2. 将编写的库安装测试一下是否正常

python setup.py develop
image.png

4.3. 打包成whl

python setup.py bdist_wheel
image.png

4.4. 上传

twine upload dist/*
twine 会使用 ~/.pypirc 文件中的api token 上传包到仓库中,上传完毕后就可以中pypi 中看到这个库image.png

5. 使用

使用pip安装这个库,就可以直接使用了
pip install wqtool

wqtool

参考:

https://www.fournoas.com/posts/authentication-on-pypi-using-api-token-instead-of-password/

https://zhuanlan.zhihu.com/p/115302375

https://zhuanlan.zhihu.com/p/503252479