python的库如何开发_如何发布⾃⼰的Python库?
前⾔与简介
我想任何⼀个有追求的Python开发者在度过基础阶段后都想过发布⾃⼰的库,也就是我们常说的造轮⼦,这是成为⼀个成熟Python开发者的第⼀步,在造轮⼦的过程中,⽆论是⾃⼰的编程能⼒还是为以后给开源项⽬贡献代码的能⼒都会得到很⼤提升。今天这篇博客,就来带⼤家从0开始,向PyPI贡献⾃⼰的开源库。
进⼊正⽂之前先说⼀下⾃⼰造轮⼦的步骤:主体程序设计与编写
编写setup.py
编写使⽤⽂档
发布到PyPI
那么,PyPI是什么呢?
PyPI (Python Package Index) 是python官⽅的第三⽅库的仓库,所有⼈都可以下载第三⽅库或上传⾃⼰
开发的库到PyPI。PyPI推荐使⽤pip包管理器来下载第三⽅库。截⾄⽬前,PyPI已经有179,387个项⽬,很多知名项⽬如Django都发布在上⾯:
正⽂
主体程序编写:
项⽬⼤体结构:
下⾯的主体程序代码仅供⽰例,演⽰如何上传⾃⼰的项⽬:新建⼀个项⽬⽂件夹,mypackage,初始化成git仓库。
新建主程序,test.py:
__version__ = '0.1.0'
python新建项目教程
"""实现你⾃⼰的轮⼦的功能"""
def main():
pass
if __name__ == '__main__':
main()编写完成之后,将其上传⾄Github,或其他代码托管平台。
选择合适的开源证书
任何⼀个开源项⽬都应当选择⼀个开源许可证,没有 License 的内容是默认会被版权保护。所以如果你想要的是让⼤家都放⼼使⽤,就需要选择⼀个合适的 License ,只有这样才能赋予任何⼈使⽤,分享和修改这个软件的权⼒。
具体如何选择,请看知乎的这篇回答:传送门
总结⼀下就是:MIT 最⾃由,没有任何限制,任何⼈都可以售卖你的开源软件,甚⾄可以⽤你的名字促销。
BSD 和 Apache 协议也很⾃由,跟 MIT 的区别分别是不允许⽤作者本⼈名义促销和保护作者版权。
GPL 最霸道,对代码的修改部分也必须是 GPL 的,同时基于 GPL 代码⽽开发的代码也必须按照 GPL 发布,
MPL 相对温和⼀些,如果后续开发的代码中添加了新⽂件,同时新⽂件中也没有⽤到原来的代码,那么新⽂件可以不必继续沿⽤ MPL 。
⼀般来说,如果选择MIT 协议就可以了。
编写setup.py
setup.py是每个能从PyPi上能下载到的库都有的⽂件,它是发布的关键所在。
⽹上的⼤部分教程都很复杂,新⼿很难看懂怎么编写,好在kennethreitz⼤神帮我们解决了这个难题,他编写了⼀个for human的
setup.py模板,项⽬地址:传送门,我们只需要把它复制过来,修改⾃⼰项⽬需要的地⽅即可,不需要额外的编写setup.cfg等其他⽂件。
代码请点击传送门查看(131⾏,就不复制了...),我们需要重点关注的是如下⼏个部分:项⽬的配置信息:
# Package meta-data.
NAME = 'mypackage'
DESCRIPTION = '填写你的项⽬简短描述.'
URL = 'github/你的github账户/mypackage'
EMAIL = 'me@example' # 你的邮箱
AUTHOR = 'Awesome Soul' # 你的名字
REQUIRES_PYTHON = '>=3.6.0' # 项⽬⽀持的python版本
VERSION = '0.1.0' # 项⽬版本号项⽬的依赖库(没有就不填):
# What packages are required for this module to be executed?
REQUIRED = [
# 'requests', 'maya', 'records',
]setup部分:
这⾥⼤部分内容都不⽤你填,只有以下⼏个注意点需要注意的是long_description这⾥默认是你项⽬的README.md⽂件
注释掉的entry_points部分是⽤来⽣成命令⾏⼯具或者GUI⼯具的(理论上是跨平台的),⽐如这⾥我⽣成了⼀个test的命令来代替test.py 的main函数,安装成功以后就可以直接使⽤“test”命令:
python entry_points={ 'console_scripts': ['test=test:main'], },
如果你的项⽬⽂件夹下只有⼀个py⽂件来实现你的功能的话,需要将packages=find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]),注释掉,然后取消py_modules的注释并进⾏相应修改。
setup(
name=NAME,
version=about['__version__'],
description=DESCRIPTION,
long_description=long_description,
long_description_content_type='text/markdown',
author=AUTHOR,
author_email=EMAIL,
python_requires=REQUIRES_PYTHON,
url=URL,
packages=find_packages(exclude=["tests", "*.tests", "*.tests.*", "tests.*"]),
# If your package is a single module, use this instead of 'packages':
# py_modules=['mypackage'],
# entry_points={
# 'console_scripts': ['mycli=mymodule:cli'],
# },
install_requires=REQUIRED,
extras_require=EXTRAS,
include_package_data=True,
license='MIT',
classifiers=[
# Trove classifiers
'License :: OSI Approved :: MIT License',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy'
]
,
# $ setup.py publish support.
cmdclass={
'upload': UploadCommand,
},
)
⾄此setup.py就完成了。
编写使⽤⽂档
⼀个好的项⽬,是需要有⼀个条理清晰的⽂档的,⾄于如何编写,就看你在README.md⾥怎么发挥了。
由于我们之前编写好了setup.py,这⾥只要在项⽬的⽂件夹下运⾏python setup.py upload即可,中间需要你输⼊账号密码。⾄此,⼀个项⽬已经上传完毕了,只需pip install mypackage即可使⽤,下⾯扩
展⼀下聊聊,怎么进⾏后续的维护。
项⽬的维护升级有更新升级之后,⾸先要运⾏如下命令删除dist⽂件夹中的旧版本打包⽂件,然后⽣成新⽂件:
sudo python setup.py sdist之后,输⼊以下命令,上传新版本即可:
python setup.py upload
结语
写到这⾥,⼀个项⽬的完整发布与维护流程已经结束了,希望能帮助到同时Python开发者的你。
插个题外话,如果⼤家对开头的⾃动统计代码⾏数的⼯具满意的话,欢迎给个star..

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。