天天看點

Python打包分發

文章目錄

  • ​​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.打包的主要工具

  1. distutils
  • 官方庫distutils,​​使用安裝腳本setup.py​​ 來建構、安裝包。
  • 從1998年就是标準庫的一部分,直到2000年停止開發。
  1. setuptools
  • 它是替代distutils的增強版工具集,包含easy_install工具,使用ez_setup.py檔案。支援egg格式的建構和安裝。 提供查詢、下載下傳、安裝、建構、釋出、管理等包管理功能。
  • setuptools是包管理的核心子產品。後來,setuptools開發緩慢了,出現基于setuptools的distribute來替代setuptools。2013年,這兩個項目重新合 并,distribute被廢棄,setuptools依然是Python安裝打包的标準方式。
  1. pip
  • pip目前包管理的事實标準。
  • 建構在setuptools之上,替代easy_install的。同樣提供豐富的包管理功能。
  • Python3.4之前,需要單獨安裝,從Python3.4開始直接包含在安裝檔案中。
  1. 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​

  • 包結構如下:
  • Python打包分發
  • 在項目根目錄,建構一個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"]  #打包清單
      )      
  • 注意:
  1. packages是一個清單,記錄需要打包的包名,在打包時,隻會建構記錄在packages中的包,和包内的子產品。如果包中包含其他包,沒有記錄在清單中,那麼該包将不會出現在打包後的包中。
  2. 如果​

    ​packages = ["m"]​

    ​那麼打包隻會建構m檔案夾下的*.py檔案,不會添加其他多餘檔案和子包。
  • setup()常用帶參數:
  1. name #名字
  2. version #版本号
  3. package=[] #打包清單
  4. description #描述資訊
  5. author #作者
  6. author_email #作者郵件
  7. url #包的首頁,可以不寫

指令行操作打包

  • 建立好setup.py檔案後,想要打包,需要在指令行中操作,進入控制台,切換到項目的根目錄。

查詢指令幫助

  • ​setup.py --help [cmd1 cmd2 ...]​

    ​​ #檢視setup指令的使用幫助

    例如:

  • ​python setup.py --help-commands​

    ​ #看setup指令的幫助文檔
  • ​python setup.py cmd --help​

    ​ #檢視setup指令的幫助文檔
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的目錄了。結構如下:
  • Python打包分發
  • 3.build得到的檔案,直接拷貝到其他姓名就可以用。
2.install指令,安裝

在build後可以install,直接運作

python ​​setup.py​​ install

如果沒有build,會先build編譯,然後安裝。

安裝後會出現在python環境中的site-packages檔案夾中,如下圖的m包安裝後

Python打包分發
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格式