想要研究一下要怎麼把自己寫的 Python Module 打包起來, 結果意外發現 Python 這方面的工具也是多條支線發展當中, 這應該是有很多歷史因素吧~
http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-and-setuptools
http://wokslog.wordpress.com/2011/06/04/distutils-diff/
http://ziade.org/2010/03/03/the-fate-of-distutils-pycon-summit-packaging-sprint-detailed-report/
- distuils
- Setuptools
- Distribute
- Distuils2
結論就是, 目前的狀況還是以 Setuptools or Distribute 為主, 兩者的功能沒有相差很多.下面這個網站就教導了大家應該要如何安排 Folder Structure 以及如何打包你的 module, 照著作就可以了。
Guide
http://guide.python-distribute.org/introduction.html
Distribution 的問題解決之後, 接下來就是 Installer 的問題, 你打包好的東西, 裡面都會有個 setup.py, 一般情況下可以直接執行這個 setup.py 就可以安裝你的 module. 不過還是有些麻煩, 必須要解壓縮, 而且重點是別人要怎麼找到你打包好的 package 呢? Installer 在這裡發揮的角色就是負責幫你找出來要去那裡下載 package, 以及處理相關 dependency, 最後再幫你安裝好, 其實和 Debian/Ubuntu 裡的 apt-get 是一樣的角色
- easy_install
早期的 installer, 但目前也還是很多人使用
- Pip
取代 easy_install, 目前最 Popular 的 python 安裝工具, 事實上 Pip 在安裝時還是會用到 easy_install, 只是額外再多提供了一些功能, 像是完整的列出你目前已安裝好的 python package 之類的, 讓你在管理你的 python package 更方便
而不管是 easy_install 或是 Pip, 預設都會到 PyPI http://pypi.python.org/pypi 找尋已發行的 Python 套件
另外我發現 pip install 在執行時, 會加上 --single-version-externally-managed, 這和直接執行 easy_install 產生的結果會有些不同, 主要是資料夾的排放方式
http://stackoverflow.com/questions/368636/questions-about-setuptools-and-alternatives
http://peak.telecommunity.com/DevCenter/setuptools#install-command
Easy_install 會將 egg 資料夾和你的 package 統一擺放在一個資料夾下, 如下圖
/usr/local/lib/python2.7/dist-packages
├── easy-install.pth
└── python_novaclient-2012.2-py2.7.egg <------------- 統一放在這邊下面
├── EGG-INFO <-------------- EGG 資料夾
│ ├── PKG-INFO
│ ├── ...
│
└── novaclient <--------------- 你的 package
├── base.py
├── client.py
├── ...
而用 pip install 產生的結果會如下
/usr/local/lib/python2.7/dist-packages
├── easy-install.pth
├── novaclient <------------ 你的 package
│ ├── base.py
│ ├── client.py
│ ├── ...
│
└── python_novaclient-2012.1.egg-info <------------ EGG 資料夾
├── PKG-INFO
├── ...
雖然資料夾擺放的方式不一樣, 不過在使用上是一樣的, 不會造成
最後再提供一兩個教你怎麼擺放 Folder Structure 的 Template.
Folder Template
2014/03/28 Update
目前最新的教戰手則https://python-packaging-user-guide.readthedocs.org/en/latest/current.html
沒有留言:
張貼留言