文章目錄
- Python打包分發
- 1.包管理
- 2.打包的主要工具
- 3.使用setup.py打包
- 指令行操作打包
- 查詢指令幫助
- 1.build指令,編譯
- 2.install指令,安裝
- 3.sdist指令
- 4.bdist指令
- 5.wheel包
Python打包分發
1.包管理
Python的子產品或者源檔案直接可以複制到目标項目目錄中,就可以導入使用了。但是為了更多項目調用使用,或者共享給别人,就需要打包,或釋出到網絡,以便供人使用。目的也是為了複用。
- Pypi(Python Package Index),公共的子產品存儲中心,https://pypi.python.org/pypi
2.打包的主要工具
- distutils
- 官方庫distutils,使用安裝腳本setup.py 來建構、安裝包。
- 從1998年就是标準庫的一部分,直到2000年停止開發。
- setuptools
- 它是替代distutils的增強版工具集,包含easy_install工具,使用ez_setup.py檔案。支援egg格式的建構和安裝。 提供查詢、下載下傳、安裝、建構、釋出、管理等包管理功能。
- setuptools是包管理的核心子產品。後來,setuptools開發緩慢了,出現基于setuptools的distribute來替代setuptools。2013年,這兩個項目重新合 并,distribute被廢棄,setuptools依然是Python安裝打包的标準方式。
- pip
- pip目前包管理的事實标準。
- 建構在setuptools之上,替代easy_install的。同樣提供豐富的包管理功能。
- Python3.4之前,需要單獨安裝,從Python3.4開始直接包含在安裝檔案中。
- wheel
- wheel格式定義在PEP427中。wheel檔案中不包含.pyc檔案。
- 提供 bdist_wheel 作為 setuptools 的擴充指令,這個指令可以用來生成新打包格式 wheel。
- pip 從1.4版本開始 提供了一個 wheel 子指令來安裝 wheel 包。當然,需要先安裝 wheel 子產品。 它可以讓Python庫以二進制形式安裝,而不需要在本地編譯。
3.使用setup.py打包
setup.py建立一個源代碼分發包的例子,參照例子 https://docs.python.org/3.5/distutils/setupscript.html。 可以在幫助文檔chm上搜尋索引setup,點選上面的Distributing Python Modules (Legacy version) ,然後選 擇
Writing the Setup Script
- 包結構如下:
- 在項目根目錄,建構一個setup.py檔案。setup.py檔案内容如下:
from distutils.core import setup
#導入setup函數
setup(name="m", #名稱
version="0.1.0", #版本
author="xdd", #作者
author_email="[email protected]", #作者郵箱
url="https://www.xdd.com/", #包的首頁,可以不寫
packages=["m","m.m2","m.m2.m21"] #打包清單
)
- 注意:
- packages是一個清單,記錄需要打包的包名,在打包時,隻會建構記錄在packages中的包,和包内的子產品。如果包中包含其他包,沒有記錄在清單中,那麼該包将不會出現在打包後的包中。
- 如果
那麼打包隻會建構m檔案夾下的*.py檔案,不會添加其他多餘檔案和子包。packages = ["m"]
- setup()常用帶參數:
- name #名字
- version #版本号
- package=[] #打包清單
- description #描述資訊
- author #作者
- author_email #作者郵件
- url #包的首頁,可以不寫
指令行操作打包
- 建立好setup.py檔案後,想要打包,需要在指令行中操作,進入控制台,切換到項目的根目錄。
查詢指令幫助
-
setup.py --help [cmd1 cmd2 ...]
#檢視setup指令的使用幫助
例如:
-
#看setup指令的幫助文檔python setup.py --help-commands
-
#檢視setup指令的幫助文檔python setup.py cmd --help
1.build指令,編譯
文法:
python setup.py build
- 1.執行結果如下:
D:\MyPythonUse\UserPython2>python setup.py build
running build
running build_py
creating build
creating build\lib
creating build\lib\m
copying m\m1.py -> build\lib\m
copying m\__init__.py -> build\lib\m
creating build\lib\m\m2
copying m\m2\m22.py -> build\lib\m\m2
copying m\m2\__init__.py -> build\lib\m\m2
creating build\lib\m\m2\m21
copying m\m2\m21\__init__.py -> build\lib\m\m2\m21
D:\MyPythonUse\UserPython2>
- 2.會在目前位置建立一個build目錄,build目錄中會建立一個lib子目錄,lib下就是子產品m的目錄了。結構如下:
- 3.build得到的檔案,直接拷貝到其他姓名就可以用。
2.install指令,安裝
在build後可以install,直接運作
python setup.py install
如果沒有build,會先build編譯,然後安裝。
安裝後會出現在python環境中的site-packages檔案夾中,如下圖的m包安裝後
3.sdist指令
$python setup.py sdist
建立原碼的分發包。
參數一個dlist目錄。裡面生成一個帶版本号的壓縮包。
在其他地方解壓縮這個檔案,裡面有
setup.py
,就可以使用
$ python setup.py install
安裝了, 也可以
$ pip install m-0.1.0.zip
直接使用pip安裝這個壓縮包。
4.bdist指令
二進制分發包,或稱作安裝程式。它可以生成目标作業系統的安裝程式。
制作windows下的安裝包
$ python setup.py bdist_wininst
$ python setup.py bdist_msi
$ python setup.py bdist --format=msi
rpm包
$ python setup.py bdist_rpm
$ python setup.py bdist --format=rpm
壓縮檔案
$ python setup.py bdist --format=zip
$ python setup.py bdist --format=gztar
可以把自己寫好的子產品釋出到公共的Pypi上,也可以搭建Pypi私服,供企業内部使用。
Pypi裡面的子產品沒有太好的稽核機制,不保證安全,請慎重使用。
5.wheel包
安裝wheel依賴
$ pip install wheel
wheel是setuptools指令的擴充,所有需要使用setuptools中的setup函數
setup.py檔案修改後如下:
# from distutils.core import setup
from setuptools import setup
#導入setup函數
setup(name="m", #名稱
version="0.1.0", #版本
author="xdd", #作者
author_email="[email protected]", #作者郵箱
url="https://www.xdd.com/", #包的首頁,可以不寫
packages=["m","m.m2","m.m2.m21"] #打包清單
)
- 将包打包成egg格式
- 将包打包成whl格式