引言
经过上一节中所述,我们搭建好了一个Python环境用于库开发,我们在这一节真正开始搭建一个库,并将其发布。
项目文档结构
首先我们先构建出自己项目的文档结构,首先是LICENSE
和README.md
,这两个文件并不是必要的,但是最好将其加上,方便别人了解你的项目。README.md
是关于本项目的介绍,LICENSE
是表示该项目所遵循的开源协议,一般MIT
用的比较多,其他协议你可以百度谷歌了解一下。
接下来是打包库需要的一些文件,主要有MANIFEST.in
和setup.py
两个文件。MANIFEST.in
表示打包时不会被自动包含进去的附加文件清单。setup.py
是打包程序配置文件,需要设置一些选项。此外,setup.cfg
是包含setup.py额外配置信息的文件,我没有用到这其中的设置,所以本项目中其是空的。
caafinder
文件夹就是我们要写的Python程序,我们要注意这个文件夹里必须有__init__.py
这个文件。
├── LICENSE
├── README.md
├── MANIFEST.in
├── caafinder
│ ├── __init__.py
│ ├── workspace.py
│ ├── database.py
├── setup.cfg
├── setup.py
下面是一下setup.py
的一些简单配置选项,详细请参考官方文档。
from setuptools import setup, find_packages
setup(
name = 'caafinder',
version = '0.1.4',
keywords='ds caa',
description = 'a library for DS CAA Developer',
license = 'MIT License',
url = 'https://github.com/Gutier14/CAAFinder',
author = 'Luca Liu',
author_email = 'geekluca@qq.com',
packages = find_packages(),
include_package_data = True,
platforms = 'any',
install_requires = [],
)
可以参考一下:
- PyPA sample project这是一个官方示例库结构。
- Python Packaging User Guide这是Python打包的官方英文文档。
关于模块
模块也就是库,我们自己写程序时,通常通过import XX
来导入一个需要的模块,在Python中,一个py文件就是一个模块,如一个abc.py
的文件就是一个名字叫abc的模块。你也许还想到,如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package),包是一个带有__init__.py
的文件夹,如图中文档所示,我们有一个包caafinder
,因为它的子级有一个__init__.py
,包caafinder
拥有database
和workspace
两个模块。__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块,而它的模块名就是caafinder
。
├── caafinder
│ ├── __init__.py
│ ├── workspace.py
│ ├── database.py
程序打包
通过执行下列语句来进行打包:
python setup.py xxx
其中xxx可以是下列几种方式中其中一个:
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
bdist_egg create an "egg" distribution
举个例子:
python setup.py sdist #生成的文件支持 pip
此时在根目录出现了dist文件夹,里面有name-version.tar.gz这个文件,这就是我们要发布到PyPI的压缩包了。
发布到PyPI
首先我们需要在PyPI上注册一个帐号,并在本地用户根目录下创建文件~/.pypirc,这样以后就不需要输入帐号密码了。
[distutils]
index-servers=pypi
[pypi]
repository = https://pypi.python.org/pypi
username = <username>
password = <password>
接下来,需要在PyPI网站上注册一个项目,网站提供三种方式注册,选择一种即可,最简单的是通过上传打包时生成的PKG-INFO
文件,生成项目信息。此步骤只需在第一次发布时操作。
接下来就是最后一步,上传打包好的库。我们这里是用twine
,如果环境中没有安装,需要先采用pip install twine
安装即可。
twine upload dist/*
此时在网页上就可以看到自己的源代码包啦,并且可以通过使用pip install packagename
,就可以使用我们自己写的Python库了。
祝大家玩的开心,希望大家能到Github上帮忙点个赞。