自己完成一个项目之后如何发布库至Pypi上方便他人使用呢?本人最近遇到了这个问题,现在将这个过程记录下来方便之后查阅。
1. Python库的打包
1.1 项目的准备
要将已有的代码打包只需要在原来的基础上准备打包的脚本。setuptools是python代码打包的常用工具,只需要编写打包脚本即可方便的转化为已于安装的形式。
为了便于讨论,我们假设有如下的项目结构:
/example
setup.py
example.py
config.json
readme.md
1.2 setup.py脚本的编写
setup.py是核心的打包脚本,一个例子如下。
from setuptools import setup, find_packages
# 如果在Pypi上需要长描述,需要增加README文件
with open("README.md", "r") as f:
long_description = f.read()
setup(
name="example-library",
version="1.0",
author="example",
author_email="example@example.com",
description="example code for test",
long_description=long_description,
long_description_content_type="text/markdown",
# The URL to visit your project.
url="www.bing.com",
# The python files are used as library.
py_modules=["example"],
# Static files which we should include in our project.
data_files=[("",["config.json"])],
packages=find_packages(),
include_package_data=True,
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
setup中包含的选项还有很多,具体可以参考官方文档。
1.3 项目打包
项目结构完成后,可以就行打包和本地安装。本地安全便于调试和开发,打包是为了上传至Pypi等平台方便他人使用。
本地安装
本地安装适合使用源代码直接安装的场景以及开发阶段的调试。使用他人的源码安装时可以使用如下脚本:
# 直接运行setup脚本
python setup.py install
# 或者使用pip安装
pip install .
开发阶段为了方便更新,可以创建软链接避免频繁的安装过程:
python setup.py develop
当库的开发完成后,下一步便是将库打包为单个安装包。Python支持wheel以及egg格式的安装包。注意Pypi要求上传wheel格式的安装包。具体打包的步骤为:
# 产生wheel格式的安装包
python3 setup.py sdist bdist_wheel
# 产生egg格式的安装包(不推荐)
python3 setup.py sdist
打包完成后,当前目录下产生dist文件夹,包含的内容为:
/example
/dist
example-version-pythonversion.tar.gz
example-version-pythonversion.whl
2. 上传至Pypi
为了方便他人使用我们封装好的库,我们可以将安装包上传至Pypi,这样他人可以直接使用pip安装我们提交的安装包。
2.1 准备账户
首先使用邮箱注册一个账号。在Pypi的官方网站上使用邮箱注册一个账号。
image.png
2.2 上传包
接下来,将我们提前打包的文件上传至服务器即可。
cd example/
# 安装twine
sudo apt install twine
# 上传wheel安装包
twine upload dist/*
上传时需要提供之前注册的Pypi用户名以及正确的密码。之后就可以在projects中查看已经上传的文件。
3. 测试已部署的包
使用pip下载上传的安装包并尝试调用已有的接口即可。
pip install example-library
import xxx from example
...
do_something()
...