发布Python包到pypi
@
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.
2.3. 添加API tokens
目前安全要求,上传包不允许直接使用账号密码(以前是可以的,网上大部分教程也是直接使用账号密码上传)将API token 添加到用户目录下的.pypirc 文件中
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
4.3. 打包成whl
python setup.py bdist_wheel
4.4. 上传
twine upload dist/*
twine 会使用 ~/.pypirc 文件中的api token 上传包到仓库中,上传完毕后就可以中pypi 中看到这个库
5. 使用
使用pip安装这个库,就可以直接使用了
pip install wqtool
wqtool
参考:
https://www.fournoas.com/posts/authentication-on-pypi-using-api-token-instead-of-password/