0%

创建python SDK 并上传至pypi

一、python打包创建SDK

1、首先,我们需要一个工具包来协助我们完成python打包的任务

1
pip3 install setuptools

2、之后封装好你的项目api

目录结构

├─python-sdk
│ │ README.md
│ │ setup.py
│ └─Demo
|            | demo.py
|           │ __init__.py
|

Demo/demo.py.py中只有一个输出函数demo(),这里可以自行封装自己的api

3、编写setup.py文件,用于安装Demo包

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
setup.py各参数介绍:
--name 包名称
--version (-V) 包版本
--author 程序的作者
--author_email 程序的作者的邮箱地址
--maintainer 维护者
--maintainer_email 维护者的邮箱地址
--url 程序的官网地址
--license 程序的授权信息
--description 程序的简单描述
--long_description 程序的详细描述
--platforms 程序适用的软件平台列表
--classifiers 程序的所属分类列表
--keywords 程序的关键字列表
--packages 需要处理的包目录(包含__init__.py的文件夹)
--py_modules 需要打包的python文件列表
--download_url 程序的下载地址
--cmdclass
--data_files 打包时需要打包的数据文件,如图片,配置文件等
--scripts 安装时需要执行的脚步列表
--package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': 'lib'},表示“root package”中的模块都在lib 目录中。
--requires 定义依赖哪些模块
--provides定义可以为哪些模块提供依赖
--find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 __init__.py的包。

其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。另外,也可以排除一些特定的包

find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"])

--install_requires = ["requests"] 需要安装的依赖包
--entry_points 动态发现服务和插件,下面详细讲

下列entry_points中: console_scripts 指明了命令行工具的名称;在“redis_run = RedisRun.redis_run:main”中,等号前面指明了工具包的名称,等号后面的内容指明了程序的入口地址。

1
2
3
1 entry_points={'console_scripts': [
2 'redis_run = RedisRun.redis_run:main',
3 ]}

这里可以有多条记录,这样一个项目就可以制作多个命令行工具了,比如:

1
2
3
4
5
6
7
1 setup(
2 entry_points = {
3 'console_scripts': [
4 'foo = demo:test',
5 'bar = demo:test',
6 ]}
7 )

1、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
39
40
41
1 #!/usr/bin/env python
2 # coding=utf-8
3
4 from setuptools import setup
5
6 '''
7 把redis服务打包成C:\Python27\Scripts下的exe文件
8 '''
9
10 setup(
11 name="RedisRun", #pypi中的名称,pip或者easy_install安装时使用的名称,或生成egg文件的名称
12 version="1.0",
13 author="Andreas Schroeder",
14 author_email="andreas@drqueue.org",
15 description=("This is a service of redis subscripe"),
16 license="GPLv3",
17 keywords="redis subscripe",
18 url="https://ssl.xxx.org/redmine/projects/RedisRun",
19 packages=['RedisRun'], # 需要打包的目录列表
20
21 # 需要安装的依赖
22 install_requires=[
23 'redis>=2.10.5',
24 'setuptools>=16.0',
25 ],
26
27 # 添加这个选项,在windows下Python目录的scripts下生成exe文件
28 # 注意:模块与函数之间是冒号:
29 entry_points={'console_scripts': [
30 'redis_run = RedisRun.redis_run:main',
31 ]},
32
33 # long_description=read('README.md'),
34 classifiers=[ # 程序的所属分类列表
35 "Development Status :: 3 - Alpha",
36 "Topic :: Utilities",
37 "License :: OSI Approved :: GNU General Public License (GPL)",
38 ],
39 # 此项需要,否则卸载时报windows error
40 zip_safe=False

2、简单setup.py的项目示例代码

上边的setup.py比较复杂,参数较多,可根据自己的实际情况做删减,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import setuptools

# 打包: python setup.py sdist
# 对包进行检查: twine check dist/*
# 运行上传: twine upload dist/* --config-file .pypirc


# 读取项目的readme介绍
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="******SDK",
version="1.0.2",
author="******", # 项目作者
author_email="******@qq.com",
description="This is the official Python SDK for Niffler Analytics.",
long_description=long_description,
long_description_content_type="text/markdown",
url="******",
packages=setuptools.find_packages(),
)

二、用Python将库打包发布到pypi

如果需要将自己写好的python打包,并发布到pypi,这样其他人就可以直接通过pip install来安装对应的包,可以参考如下教程

1. 注册pypi账号并创建token


然后选择API token->Add API token

输入token name并在Scope中选择Entire account(第一次需要选择Entire account)

然后在本地,修改.pypirc文件
输入的内容为:

1
2
3
[pypi]
username = __token__
password = {token}

只需要修改{token}为自己的token即可

2、打包

打包命令为python setup.py cmd
cmd可以取值为

1
2
3
4
5
6
7
bdist_wheel : create a wheel distribution
bdist_egg : create an “egg” distribution
sdist : create a source distribution (tarball, zip file, etc.)
bdist : create a built (binary) distribution
bdist_dumb : create a “dumb” built distribution
bdist_rpm : create an RPM distribution
bdist_wininst : create an executable installer for MS Windows

打包为tar.gz

1
python setup.py sdist

3、上传

安装twine pip install twine
可以首先使用twine对包进行检查

1
twine check dist/*

输出如下

再运行上传命令

1
twine upload dist/*

数据注册好的pypi的用户名密码即可,如果在.pypirc文件中配置了用户名密码,也可以直接指定这个文件为配置文件

可以用Makefile来自动运行打包上传

1
2
3
4
5
6
7
8
9
10
11
upload: ## 编译dockerbase
@echo "===========start...==========="
rm -rf ./dist
rm -rf ./NifflerAnalyticsSDK.egg-info
@echo "===========python setup.py sdist...==========="
python setup.py sdist
@echo "===========check...==========="
twine check dist/*
@echo "===========upload...==========="
twine upload dist/* --config-file .pypirc
@echo "===========finished...==========="
------------- 本文结束 感谢您的阅读-------------