python 打包及發佈

1.新建setup.py文件

首先需要在項目中新建setup.py文件,然後編寫setup.py。


一個典型的setup.py的寫法如下(參考自官方文檔):


from distutils.core import setup


#This is a list of files to install, and where
#(relative to the 'root' dir, where setup.py is)
#You could be more specific.
files = ["things/*"]


setup(name = "appname",
version = "100",
description = "yadda yadda",
author = "myself and I",
author_email = "email@someplace.com",
url = "whatever",
#Name the folder where your packages live:
#(If you have other packages (dirs) or modules (py files) then
#put them into the package directory - they will be found 
#recursively.)
packages = ['package'],
#'package' package must contain files (see list above)
#I called the package 'package' thus cleverly confusing the whole issue...
#This dict maps the package name =to=> directories
#It says, package *needs* these files.
package_data = {'package' : files },
#'runner' is in the root.
scripts = ["runner"],
long_description = """Really long text here.""" 
#
#This next part it for the Cheese Shop, look a little down the page.
#classifiers = [] 
)

在setup.py文件中編寫 setup()函數,這個函數裏面有相當多的屬性,比如version表示版本號,description 是描述文檔,author是作者等,其中比較重要的幾個選項是,name,表示模塊的名稱。packages,表示包所在的目錄,如果我們要打包的所有python文件都在根目錄,即和setup.py是一個目錄,那麼直接寫 packages=[""]就可以了。如果python文件在一個單獨的文件夾,和setup.py不在同一個目錄,則需要寫 package_dir=["":"python 文件所在的目錄名字"],比如如果有foo1.py 和 foo2.py這兩個文件,在src這個文件夾,那麼需要寫package_dir=["":"src"],同時寫packages=[""],打包就可以導入foo1和foo2兩個模塊了。如果想在同一個包中包含多個模塊,比如在foo包中包含foo1和foo2兩個模塊,則可以直接把foo1.py和foo2.py所在的文件夾直接命名爲foo,然後寫 packages["foo"] (注意foo文件夾需要有__init__.py這個文件,可以爲空,這樣才能引用到foo1和foo2)。有的時候我們寫的代碼需要引入一些額外的信息文件,比如文本文件,或者圖片,說明文件等等,這些東西是需要一塊打包的,那麼這個時候該如何指定呢?此時需要用到 data_files 這個選項了。data_files的寫法是:data_files= [('文件要放入的文件夾1',['file1',file2']),('文件要放入的文件夾2',['file3',file4'])],file1,file2等是文件的名稱,注意data_files的元素都是元組,元組的第一個元素是文件要放入的文件夾名稱,第二個元素是文件列表。這裏需要注意的是,如果不想把文件放入文件夾,可以將元組的第一個元素指定爲空字符串,此時要打包的文件要被放入根目錄,這裏根目錄是指python解釋器所在的目錄。比如我需要將文件資源放入python解釋器所在目錄下的/Lib/site-packages/myfolder路徑,myfolder是自定義的文件夾,元組的第一個元素就可以寫‘Lib/site-packages/myfolder’,打包時會自動在指定位置新建一個名爲myfolder的目錄,將文件資源放入其中。

2. 執行打包命令

執行打包命令:python setup.py sdist 爲模塊創建一個源碼包,在當前目錄下,會創建dist目錄,裏面有個文件名爲appname.1.0.0.zip,這個就是可以分發的包。使用者拿到這個包後,解壓,到 test.1.0.0目錄下執行:python setup.py install,那麼,包中的.py 文件就會被拷貝到python類路徑下,可以被導入使用。

對於Windows,可以執行python setup.py bdist_wininst生成一個exe文件;若要生成RPM包,執行python setup.py bdist_rpm,但系統必須有rpm命令的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章