从零开始社区之路,手把手教你开源自己的Python包
要融入社区,第一步当然是要撰写一个自己的包。整个过程主要分为五步:
- 项目创建
- 搭建虚拟运行环境
- 编写项目代码
- 编写安装脚本
- 上传PyPi
GIT 创建项目
创建项目,确定项目名称,description, license等:
项目地址:https://github.com/shikanon/BaiduMapAPI
搭建虚拟环境
我们在搭建自己的库的时候,是希望有一个干净的项目环境的,这时候virtualenv
就很有用了,采用 virtualev
搭建虚拟环境,可以方便为后面生成私有项目的 requirement.txt
依赖包文件。
创建虚拟环境
virtualev venv
启用 virtualev
:
source venv/Script/activate
构建项目代码
简单,快速构建框架原型和骨架,记得包之间需要 __init__.py
文件,后面在编写setup.py
也会很有用。 项目结构:
构建好架构后,可以开始编写单元测试代码,pytest
是个简单易用的库,可以帮助我们快速完成单元测试构建。
构建安装脚本,编写 setup.py 文件
完成代码构建和测试就可以开始进入构建安装包环节。 Python三方库安装常用的主要有两种模式:一种是直接从 github 上 clone 下来用 setup.py
安装,另一种是用 pip install
来安装。两种安装方法都是需要编写 setup.py
文件的。
对于第一种方法我们在安装前一般还要提供安装的依赖包, 也就是requirement.txt
文件。在这里我们可以直接用 pip freeze
命令生成:
pip freeze > requirement.txt
因为我们是采用新建的虚拟环境开发,所以可以直接把环境中的三方库导入到requirement.txt
文件中。
构建好 requirement.txt
后,就可以编写安装脚本。 这里采用了setuptools
编写安装脚本,Setuptools是一个包开发过程库,其增强Python标准库distutils,使得打包Python项目更简单。
setup.py
文件案例:
from setuptools import Command, find_packages, setup __lib_name__ = "BaiduMapAPI" __lib_version__ = "0.1.1" __description__ = "The Package of Baidu Map, with unofficial" __url__ = "https://github.com/shikanon/BaiduMapAPI" __author__ = "shikanon" __author_email__ = "account@shikanon.com" __license__ = "MIT" __keywords__ = ["Baidu", "map"] __requires__ = ["requests",] with open("README.rst", "r", encoding="utf-8") as f: __long_description__ = f.read() setup( name = __lib_name__, version = __lib_version__, description = __description__, url = __url__, author = __author__, author_email = __author_email__, license = __license__, packages = find_packages(exclude=("tests", "exmaple")), install_requires = __requires__, zip_safe = False, include_package_data = True, data_files = [("BaiduMapAPI/data", ["BaiduMapAPI/data/BaiduMap_cityCode_1102.txt"])], long_description = __long_description__ )
name
包名称 version
版本号 description
包描述 url
包地址 license
授权信息 packages
需要处理的包目录,也就是包含__init__.py
的文件夹 install_requires
需要安装的依赖包 data_files
可以用于引入一些额外的信息文件和数据,如图片、配置文件, [('文件要放入的文件夹1',['file1',file2']),('文件要放入的文件夹2',['file3',file4'])]
第一个元素指最后在文件要放的位置/目录,如果空字符,表示放在根目录,第二个元素指原文件所在的位置。 long_description
包的详细描述,后续上传到pypi
,可以用于显示在主页上的描述
find_packages():这个函数会默认在和setup.py同一目录下搜索各个含有__init__.py的包。 除了通过data_files
添加数据包文件,还可以通过package_data
设置可以被find_packages
找到添加的文件:
packages = find_packages(exclude=("tests", "exmaple")), # 所有包除了tests和exmaple package_data = { '': ['*.csv'], # 任何包中含有.csv文件,都包含它 'data': ['data/*.dat'], # 包含data包data文件夹中的 *.dat文件 }
写好setup.py
文件,可以python setupy install
进行安装测试。
注册 pypi 并上传自己的库
编写好安装脚本,就可以上传PyPi,当然,上传前要先看看上面是否已经有编写好的相关库了。 如果很幸运没有,那么可以开始上传自己的包了,这里我们采用twine
协助上传。
- 首先,完成PyPi的账户注册。
- 在用户目录下创建
.pypirc
文件, Linux在$HOME
创建.pypirc
, Windows在%HOMEDRIVE%
下创建.pypirc
,加入:
[distutils] index-servers = pypi pypitest [pypi] repository: https://upload.pypi.org/legacy/ username: 账户 password: 密码 [pypitest] repository: https://test.pypi.org/legacy/ username: 账户 password: 密码
- 安装twine:
pip install twine
- 创建:
python setup.py sdist bdist_wheel
- 上传PyPi:
twine upload dist/*
上传成功后可以运行pip install
命令测试。
编写文档
编写README.md
和说明文档docs
,这里我们用sphinx
库来创建文档架构,sphinx
是一个智能、漂亮的文档生成工具。
初始化docs
文件夹
sphinx-quickstart
编写rst
文件,运行make html
即可生成html
文档,
rst
文档例子:
Welcome to BaiduMapAPI's documentation! ======================================= .. toctree:: :caption: Basic concepts :hidden: api dataset Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`
上传github
最后上传到 github,这样一个完整的 Python 三方包的开源完成了。
更多精彩 https://www.shikanon.com/ 从零开始的社区之路,手把手教你开源自己的Python包。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
加一个适配层,更好的使用 Nacos 配置中心 | 文末有完整代码
Nacos 为我们提供了非常好用的配置中心的功能,并且自带了一个控制台,但是每次更新配置时,需要对整个配置项的值进行修改,非常不方便。 如何更方便、优雅、安全的使用 Nacos 配置中心,就显得非常重要,本篇文章我将为大家介绍一种通过插件适配的方式,像操作 K-V 键值对那样更加简单的使用配置中心。 现有页面的问题 我们来看一下 Nacos 现有的配置管理页面可能存在什么问题,例如我有如下图所示的一个配置项: 如果让用户直接在 nacos 中管理这些配置,用户将会非常头疼,原因如下: 1.对于非技术人员,诸如 jdbc.url 这种系统相关的配置项,他们不需要关心,也不应该由他们来管理这些配置项,直接暴露给他们的话,将会非常危险 2.有些配置项无法仅从 key 的命名中判断出它的意思,因为他们并没有做到那么好的自解释,例如上述配置中的 time.diff 就很具有疑惑性 3.配置的修改应该做到最小化,如果将所有的配置项全部暴露,可能会存在用户在修改时不小心将其中某一个配置项删除的情况,这将会带来灾难性的后果 4.根据权限划分的不同,配置项应该进行数据权限的隔离,不同的人应该只能看到自己...
- 下一篇
你会这道阿里多线程面试题吗?
背景 在前几天,群里有个群友问了我一道面试阿里的时候遇到的多线程题目,这个题目比较有意思,在这里和大家分享一下。 废话不多说,直接上题目: 通过N个线程顺序循环打印从0至100,如给定N=3则输出: thread0: 0 thread1: 1 thread2: 2 thread0: 3 thread1: 4 ..... 一些经常刷面试题的朋友,之前肯定遇到过下面这个题目: 两个线程交替打印0~100的奇偶数: 偶线程:0 奇线程:1 偶线程:2 奇线程:3 这两个题目看起来相似,第二个题目稍微来说比较简单一点,大家可以先思考一下两个线程奇偶数如何打印。 两线程奇偶数打印 有一些人这里可能会用讨巧的,用一个线程进行循环,在每次循环里面都会做是奇数还是偶数的判断,然后打印出这个我们想要的结果。在这里我们不过多讨论这种违背题目本意的做法。 其实要做这个题目我们就需要控制两个线程的执行顺序,偶线程执行完之后奇数线程执行,这个有点像通知机制,偶线程通知奇线程,奇线程再通知偶线程。而一看到通知/等待,立马就有朋友想到了Object中的wait和notify。没错,这里我们用wait和notify对...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器