python3之自定義包的釋出
python3之自定義包的釋出
如果已經開發好了具備某些通用功能的模組包,恰好作者也是一個特別具有分享精神的開發人員,要將自己開發的python模組釋出出來,提供給其他人進行操作使用,類似於我們使用pygame這樣第三方模組一樣,別人也可以通過命令直接安裝使用,應該怎麼操作?
檔案目錄結構
PlanWarsDemo
—>images
———>>圖片檔案
—>music
———>>音樂檔案
—>1.py
—>init.py
—>data.py
—>game_engine.py
—>game_sprites.py
—>p.ico
—>setup.py
—>start.py
1. 本地釋出
在我們已經開發好的一個包資料夾下,建立一個python模組:setup.py
。模組中定義如下內容:
# 引入構建包資訊的模組
from distutils.core import setup
# 定義釋出的包檔案的資訊
setup(
name = "PlanWars_test01", # 釋出的包檔名稱
version = "1.0", # 釋出的包的版本序號
description = "我的測試包", # 釋出包的描述資訊
author = "llf", # 釋出包的作者資訊
author_email = "[email protected] ", # 作者聯絡郵箱資訊
py_modules = ['__init__','start', 'game_engine',
'game_sprites', 'data'] # 釋出的包中的模組檔案列表
)
執行當前程式包檔案的構建操作命令:按照標準格式組織包中的所有資料檔案:
python setup.py build
REMARK:構建完畢的檔案,可以通過python setup.py install命令直接當成第三方模組進行安裝。用上面命令安裝的模組,不能通過pip uninstall xx 進行解除安裝,只能進入對應的資料夾中手動刪除檔案即可。
執行命令進行包的打包釋出:
python setup.py sdist
REMARK:打包的檔案,主要是方便進行網路傳輸,打包之後會在當前目錄下的dist中建立包含包中所有資訊的tar.gz壓縮包檔案;該檔案就可以通過git等方式提交給對應的開源組織釋出你的自定義模組了!
2. 網路釋出
經歷了前面一小節的操作之後,我們能不能讓我們自己的包也類似於pip install這樣的方式通過網路進行安裝呢? 當然可以!當然前提條件是我們將自己的包釋出到網路上!
首先,進入http://pypi.python.org/pypi網站上,註冊一個自己的賬號吧!這個網站是目前大部分python第三方模組集中的一個管理社群平臺。
其次:你已經準備好你自己的python程式包,並在包中準備好了setup.py檔案,在setup.py中,已經定義好了程式包的所有描述資訊。
執行打包命令
python setup.py sdist
如果要包含靜態檔案,則要修改檔名為‘MANIFEST.in’的檔案,如果沒有建立該檔案,選擇性新增下面的引數再執行上面的命令即可。
Command | Description |
---|---|
include pat1 pat2 … | include all files matching any of the listed patterns(包括檔案) |
exclude pat1 pat2 … | exclude all files matching any of the listed patterns(忽略檔案) |
recursive-include dir pat1 pat2 … | include all files under dir matching any of the listed patterns(包括dir目錄下的pat1…等檔案) |
recursive-exclude dir pat1 pat2 … | exclude all files under dir matching any of the listed patterns(忽略dir目錄下的pat1…等檔案) |
global-include pat1 pat2 … | include all files anywhere in the source tree matching — & any of the listed patterns(全域性包括) |
global-exclude pat1 pat2 … | exclude all files anywhere in the source tree matching — & any of the listed patterns(全域性忽略) |
prune dir | exclude all files under dir(忽略此資料夾) |
graft dir | include all files under dir(包含此資料夾下的所有檔案) |
我的MANIFEST.in檔案內容如下:
include 1.py # 1.py檔案
graft ./images # image目錄下的所有圖片檔案
graft music # music目錄下的所有音樂檔案
接下來:將是激動人心的時刻!首先安裝第三方模組:twine,用於上傳我們打包的專案檔案。
安裝twine模組
pip install twine
上傳專案
twine upload dist/*
釋出成功後,其他人可以通過pip install xx的方式安裝自己釋出的模組。