在之前这个实现json比较的库的帖子里,我把库上传pypi的时候,相当坑。而且pypi有个特点,就是你一旦弄错了,就不能删除原来的名字(但可以删库,也可以更新版本,就是不能替换)。所以上传时应该尽量谨慎。
1. 注册pypi的账号
访问pypi.org并点击register(有部分网络pypi访问速度较差,可能发生上传或下载失败的情况,请换个网络环境,或者自备代理)。可以使用QQ邮箱,它会要求你的邮箱验证。
如果你想使用pypitest来测试发布,也可以同时注册pypitest。
2. 处理路径。你的项目应该呈现这样的结构:
其中里层的是你要上传的包。而外层来写setup.py和readme。这两个将在后面介绍。dist是打包发布后自动生成的文件夹,里面有打成的包(python编译exe的同学应该对此不陌生,因为编译exe的输出路径一般也在dist里面),而MANIFEST也是自动生成。所以我们着重要做的就是__init__.py,还有reademe和setup.py这三个文件的编写。
3. 代码规范化。
在打包前应该注意一些事情。
- 整个代码中,除了
if __name__ == "__main__"
可以包含打印输出、调试的部分之外,其他地方都应该只有函数、类、全局变量等的定义。导入时不应该出现print等副作用。除非你确实希望如此例外。 - 在例子中,json_compare是我实现功能的库,而test_json_compare是测试用例。其中__init__.py文件则是python中将一个目录识别为包必不可少的文件,是访问包的入口。在内应导入所有需要暴露的类或函数。为兼容,最好如下图使用相对路径导入。(如果不是一个包,普通目录内这样写IDE会报错)
- 版本兼容。考虑你的代码究竟适合于哪些版本,并小心测试通过。在我的例子中,我支持了python2.x和3.x,所以特意使用six模块进行适配,有些地方需要去针对不同版本做不同的操作。另外,要考虑平台的兼容性。所以每个文件的头两行应该使用标准的方法来写,避免放到Linux的机器上不识别。
#!/usr/bin/env python
# coding: utf-8
- 编写注释和类型提示。尤其是针对对外暴露的方法编写注释。
使用一对三双引号,是python中函数和类注释文档的规范。函数写完后输入三个",pycharm会自动帮你形成文档骨架。:param表示参数,随后写参数的类型,最后是参数名,比如参数a的类型就是str/unicode/l