文档章节

从零开始社区之路,手把手教你开源自己的Python包

Kanonpy
 Kanonpy
发布于 03/15 23:13
字数 1278
阅读 157
收藏 11

要融入社区,第一步当然是要撰写一个自己的包。整个过程主要分为五步:

  • 项目创建
  • 搭建虚拟运行环境
  • 编写项目代码
  • 编写安装脚本
  • 上传PyPi

GIT 创建项目

创建项目,确定项目名称,description, license等:

github 项目地址: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包。

© 著作权归作者所有

Kanonpy
粉丝 16
博文 42
码字总数 45373
作品 0
广州
程序员
私信 提问
深度学习笔记3:手动搭建深度神经网络(DNN)

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/07/16
0
0
深度学习笔记2:手写一个单隐层的神经网络

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/07/13
0
0
深度学习笔记1:利用numpy从零搭建一个神经网络

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/07/12
0
0
深度学习笔记7:Tensorflow入门

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/07/23
0
0
深度学习笔记5:正则化与dropout

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/07/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部