1. 程式人生 > >python 編寫簡單的setup.py

python 編寫簡單的setup.py

ria 如何 代碼 使用 文本 highlight ttl pac 文件夾

  學習python也已經有一段時間了,發現python作為腳本語言一個很重要的特點就是簡單易用,而且擁有巨多的第三方庫,幾乎方方面面的庫都有,無論你處於哪個行業,想做什麽工作,幾乎都能找到對應的第三方庫。別人造好了輪子,我們直接拿過來用,這大大方便了開發,也極大地提升了效率。那麽問題來了,有那麽多的第三方庫,我們如何開發一個屬於自己的庫呢?其實這是一個比較大的問題,因為開發一個庫涉及到的問題很多,比如這個庫要用來幹嘛,實現什麽功能,有沒有已經類似的庫了,效率如何等。但是這裏,我只想拋磚引玉,簡單記錄一下開發的基本流程。

  編寫python的第三方庫,最終要的一個工作就是編寫setup.py了,其實如果我們下載過一些第三庫的源代碼文件,打開之後一般就會有一個setup.py,執行python setup.py install 就可以安裝這個庫了。setup.py 如何編寫內容很多,可以參考官方文檔:https://wiki.python.org/moin/Distutils/Tutorial?highlight=%28setup.py%29。一個典型的setup.py的寫法如下(參考自官方文檔):

 1 from distutils.core import setup
 2 
 3 #This is a list of files to install, and where
 4 #(relative to the ‘root‘ dir, where setup.py is)
 5 #You could be more specific.
 6 files = ["things/*"]
 7 
 8 setup(name = "appname",
 9     version = "100",
10     description = "yadda yadda",
11     author = "
myself and I", 12 author_email = "[email protected]", 13 url = "whatever", 14 #Name the folder where your packages live: 15 #(If you have other packages (dirs) or modules (py files) then 16 #put them into the package directory - they will be found 17 #recursively.) 18
packages = [package], 19 #‘package‘ package must contain files (see list above) 20 #I called the package ‘package‘ thus cleverly confusing the whole issue... 21 #This dict maps the package name =to=> directories 22 #It says, package *needs* these files. 23 package_data = {package : files }, 24 #‘runner‘ is in the root. 25 scripts = ["runner"], 26 long_description = """Really long text here.""" 27 # 28 #This next part it for the Cheese Shop, look a little down the page. 29 #classifiers = [] 30 )

首先,當然是建立一個名字叫setup.py的文件啦。 從distutils.core 導入 setup, 然後編寫 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)。其他還有很多寫法,這篇博文總結的很好,http://www.cnblogs.com/UnGeek/p/5922630.html,需要的朋友可以參考下。有的時候我們寫的代碼需要引入一些額外的信息文件,比如文本文件,或者圖片,說明文件等等,這些東西是需要一塊打包的,那麽這個時候該如何指定呢?此時需要用到 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的目錄,將文件資源放入其中。

其實 setup.py 文件的編寫還有非常多的內容,這裏只是介紹了九牛一毛。後面接觸到了更復雜的再繼續補充吧。具體還是要參考官方文檔。

最後一步就是打包命令了。這篇文章講的非常詳細:http://blog.csdn.net/lynn_kong/article/details/17540207,大家自行參考。

簡單來說,linux下的打包命令是:python setup.py sdist 為模塊創建一個源碼包。在windows下,可以使用 python setup.py bdist_wininst 生成一個exe文件。雙擊該exe文件,就會彈出python庫的安裝界面(就是經典的藍色界面),可以自己選擇要安裝的位置(特別是電腦中有多個版本的python的時候,需要指定這個庫裝到哪個python庫目錄下),一路下一步,就安裝成功了。此時去指定的python庫目錄下,就會發現多出了一些我們自己安裝的文件以及文件夾。此時試著import一下,就會發現已經可以導入我們自己的模塊了。

python 編寫簡單的setup.py