python 編寫簡單的setup.py

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

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

 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@someplace.com",
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"],同時寫linux

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',windows

['file1',file2']),('文件要放入的文件夾2',['file3',file4'])],file1,file2等是文件的名稱,注意data_files的元素都是元組,元組的第一個元素是文件要放入的文件夾名稱,第二個元素是文件列表。這裏須要注意的是,若是不想把文件放入文件夾,能夠將元組的第一個元素指定爲空字符串,此時要打包的文件要被放入根目錄,這裏根目錄是指python解釋器所在的目錄。好比我須要將文件資源放入python解釋器所在目錄下的/Lib/site-packages/myfolder路徑,myfolder是自定義的文件夾,元組的第一個元素就能夠寫‘Lib/site-packages/myfolder’,打包時會自動在指定位置新建一個名爲myfolder的目錄,將文件資源放入其中。app

其實 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一下,就會發現已經能夠導入咱們本身的模塊了。url

相關文章
相關標籤/搜索