Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python 包。要想向 pypi 包仓库提交自己开发的包,首先要将自己的代码打包,才能上传分发。
概述
Python 库打包分发主要工作是 setup.py 的编写。
官方 Guides: https://packaging.python.org/guides/distributing-packages-using-setuptools/
setuptools 简介
setuptools 是 distutils 增强版,不包括在标准库中。其扩展了很多功能,能够帮助开发者更好的创建和分发 Python 包。大部分 Python 用户都会使用更先进的 setuptools 模块。
Setuptools 有一个 fork 分支是 distribute。它们共享相同的命名空间,因此如果安装了 distribute,import setuptools
时实际上将导入使用 distribute 创建的包。Distribute 已经合并回 setuptools。
还有一个大包分发工具是 distutils2,其试图尝试充分利用distutils,detuptools 和 distribute 并成为 Python 标准库中的标准工具。但该计划并没有达到预期的目的,且已经是一个废弃的项目。
因此,setuptools 是一个优秀的,可靠的 Pthon 包安装与分发工具。以下设计到包的安装与分发均针对 setuptools,并不保证 distutils 可用。
打包源代码
根据官方的 Guides,可以很轻松的打包并发布。
首先安装依赖
pip install twine
配置要发布的项目,编写setup.py
。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from setuptools import setup, find_packages
import sys
setup(
name="xdaLibs",
version="0.0.1",
author="xda",
author_email="thianda91@outlook.com",
description="A helping-tool library for self-use",
license="MIT",
url="https://github.com/thianda/xdaLibs",
# packages=['iniConfig'],
packages=find_packages(exclude=['tests*']),
classifiers=[
# How mature is this project? Common values are
# 3 - Alpha
# 4 - Beta
# 5 - Production/Stable
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Natural Language :: English',
'Operating System :: MacOS',
'Operating System :: Microsoft',
'Operating System :: POSIX',
'Operating System :: Unix',
"Topic :: Software Development :: Libraries :: Python Modules",
'Programming Language :: Python :: 3',
],
zip_safe=False,
install_requires=[
'configparser>=3.5.0'
]
)
参考上面的填写自己要打包的信息。
执行打包命令
若打包source distribution
python setup.py sdist
若打包 Wheels
代码必须是纯 python,不可以带有 C扩展。
pip install wheel
代码支持 python2 和 python3,打包为 Universal Wheels ,这样可以被pip
安装在任何位置
python setup.py bdist_wheel --universal
也可以将参数 universal
设置在setup.cfg
[bdist_wheel]
universal=1
否则,代码不通用(不同时支持 python2 和 python3),则打包为Pure Python Wheels
python setup.py bdist_wheel
发布到 pypi
当运行了上面的命令后,会生成 dist/
的文件夹。在官方指引 中,明确给出了警告:
在其他参考文献中会推荐这两个命令:
python setup.py register
和python setup.py upload
,使用它们会造成账号密码通过 http 明文传输,或使用未验证的 https 传输,进而可能造成账号泄露。
首先去官网注册账号,将账号信息写入到 ~/.pypirc
[pypi]
username = <username>
password = <password>
上传打包的包
twine upload dist/*
如果上传成功,可以访问 https://pypi.org/project/{projectNAME}
查看。
比如我的:https://pypi.org/project/xdaLibs/
(本文完)
参考链接:http://blog.konghy.cn/2018/04/29/setup-dot-py/