1. 程式人生 > >python3之自定義包的釋出

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的方式安裝自己釋出的模組。