python編寫簡單的setup.py
學習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@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”],同時寫
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一下,就會發現已經可以匯入我們自己的模組了。
熱愛程式設計,熱愛機器學習!
github:http://www.github.com/Lyrichu
github blog:http://Lyrichu.github.io
個人部落格站點:http://www.movieb2b.com(不再維護)
相關文章
- python編寫的簡單的mysql巡檢指令碼PythonMySql指令碼
- Python編寫一個簡單計算器Python
- Python編寫簡單的學生資訊管理系統Python
- 編寫最簡單的核心:HelloWorld
- javascript編寫一個簡單的編譯器JavaScript編譯
- C編寫的簡單密碼程式密碼
- python+flask 編寫一個簡單的登入介面例子PythonFlask
- python+flask編寫一個簡單的登入介面例子PythonFlask
- 編寫一個非常簡單的 JavaScript 編輯器JavaScript
- 編寫一個簡單的智慧合約
- 編寫一個簡單的babel外掛Babel
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 編寫簡單的Java程式碼:HelloWoridJava
- Python單例的一種簡單寫法Python單例
- 【shell 練習5】編寫簡單的多級選單
- nginx 編寫簡單HTTP模組以及nginx http handler的hello world示例編寫NginxHTTP
- Android OpenGL 編寫簡單濾鏡Android
- Python編寫簡易木馬程式Python
- 關於python中的setup.pyPython
- 使用Python語言編寫簡單的HTML5語法解析器PythonHTML
- 利用 Powershell 編寫簡單的瀏覽器指令碼瀏覽器指令碼
- 教你如何編寫第一個簡單的爬蟲爬蟲
- 如何編寫簡單的應用window視窗程式
- 用Java編寫一個最簡單的桌面程式Java
- CodeIgniter編寫的簡單留言板的DEMO
- 使用Delphi,SDK編寫Windows簡單程式 (轉)Windows
- 用Python寫一個簡單的Web框架PythonWeb框架
- 用VB編寫簡單的程式來清空文件選單 (轉)
- vue..js 編寫的簡單音樂播放器VueJS播放器
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- 用jQuery編寫簡單九宮格抽獎jQuery
- 基於python編寫一個簡單的多執行緒埠掃描指令碼Python執行緒指令碼
- 怎麼用python寫簡單的遊戲指令碼?Python遊戲指令碼
- Flask之旅: 寫一個簡單的Python Web框架FlaskPythonWeb框架
- 用Python寫一個簡單的微博爬蟲Python爬蟲
- python寫的簡單分組統計指令碼Python指令碼
- javascript編寫一個簡單的編譯器(理解抽象語法樹AST)JavaScript編譯抽象語法樹AST
- Win32彙編教程四 編寫一個簡單的視窗 (轉)Win32