引言
經(jīng)過(guò)上一節(jié)中所述,我們搭建好了一個(gè)Python環(huán)境用于庫(kù)開發(fā),我們?cè)谶@一節(jié)真正開始搭建一個(gè)庫(kù),并將其發(fā)布。
項(xiàng)目文檔結(jié)構(gòu)
首先我們先構(gòu)建出自己項(xiàng)目的文檔結(jié)構(gòu),首先是LICENSE和README.md,這兩個(gè)文件并不是必要的,但是最好將其加上,方便別人了解你的項(xiàng)目。README.md是關(guān)于本項(xiàng)目的介紹,LICENSE是表示該項(xiàng)目所遵循的開源協(xié)議,一般MIT用的比較多,其他協(xié)議你可以百度谷歌了解一下。
接下來(lái)是打包庫(kù)需要的一些文件,主要有MANIFEST.in和setup.py兩個(gè)文件。MANIFEST.in表示打包時(shí)不會(huì)被自動(dòng)包含進(jìn)去的附加文件清單。setup.py是打包程序配置文件,需要設(shè)置一些選項(xiàng)。此外,setup.cfg是包含setup.py額外配置信息的文件,我沒有用到這其中的設(shè)置,所以本項(xiàng)目中其是空的。
caafinder文件夾就是我們要寫的Python程序,我們要注意這個(gè)文件夾里必須有__init__.py這個(gè)文件。
├── LICENSE
├── README.md
├── MANIFEST.in
├── caafinder
│ ├── __init__.py
│ ├── workspace.py
│ ├── database.py
├── setup.cfg
├── setup.py
下面是一下setup.py的一些簡(jiǎn)單配置選項(xiàng),詳細(xì)請(qǐng)參考官方文檔。
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這是一個(gè)官方示例庫(kù)結(jié)構(gòu)。
- Python Packaging User Guide這是Python打包的官方英文文檔。
關(guān)于模塊
模塊也就是庫(kù),我們自己寫程序時(shí),通常通過(guò)import XX來(lái)導(dǎo)入一個(gè)需要的模塊,在Python中,一個(gè)py文件就是一個(gè)模塊,如一個(gè)abc.py的文件就是一個(gè)名字叫abc的模塊。你也許還想到,如果不同的人編寫的模塊名相同怎么辦?為了避免模塊名沖突,Python又引入了按目錄來(lái)組織模塊的方法,稱為包(Package),包是一個(gè)帶有__init__.py的文件夾,如圖中文檔所示,我們有一個(gè)包caafinder,因?yàn)樗淖蛹?jí)有一個(gè)__init__.py,包caafinder擁有database和workspace兩個(gè)模塊。__init__.py可以是空文件,也可以有Python代碼,因?yàn)?code>__init__.py本身就是一個(gè)模塊,而它的模塊名就是caafinder。
├── caafinder
│ ├── __init__.py
│ ├── workspace.py
│ ├── database.py
程序打包
通過(guò)執(zhí)行下列語(yǔ)句來(lái)進(jìn)行打包:
python setup.py xxx
其中xxx可以是下列幾種方式中其中一個(gè):
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
舉個(gè)例子:
python setup.py sdist #生成的文件支持 pip
此時(shí)在根目錄出現(xiàn)了dist文件夾,里面有name-version.tar.gz這個(gè)文件,這就是我們要發(fā)布到PyPI的壓縮包了。
發(fā)布到PyPI
首先我們需要在PyPI上注冊(cè)一個(gè)帳號(hào),并在本地用戶根目錄下創(chuàng)建文件~/.pypirc,這樣以后就不需要輸入帳號(hào)密碼了。
[distutils]
index-servers=pypi
[pypi]
repository = https://pypi.python.org/pypi
username = <username>
password = <password>
接下來(lái),需要在PyPI網(wǎng)站上注冊(cè)一個(gè)項(xiàng)目,網(wǎng)站提供三種方式注冊(cè),選擇一種即可,最簡(jiǎn)單的是通過(guò)上傳打包時(shí)生成的PKG-INFO文件,生成項(xiàng)目信息。此步驟只需在第一次發(fā)布時(shí)操作。
接下來(lái)就是最后一步,上傳打包好的庫(kù)。我們這里是用twine,如果環(huán)境中沒有安裝,需要先采用pip install twine安裝即可。
twine upload dist/*
此時(shí)在網(wǎng)頁(yè)上就可以看到自己的源代碼包啦,并且可以通過(guò)使用pip install packagename,就可以使用我們自己寫的Python庫(kù)了。

祝大家玩的開心,希望大家能到Github上幫忙點(diǎn)個(gè)贊。