pip & requirements file

現在在公司用 django 在開發, 在開發過程當中, 用了許多套件, 不過都是直接裝在系統上 ( 就是裝在 site-packages 裡 ), 而 project 本身是用 mercurial 來作版本控制, 所以其他開發人員在不同機器上要開發時, 在 clone 了 source code 之後, 以為可以跑了, 但是在 runserver 時就會碰到缺了很多套件的狀況, 而套件的來源很多, 甚至有不同版本, 這一點就造成了很大的困擾。

而上禮拜研究了一下 pip, 可以解決上面提到的問題, 來記錄一下。

研究了 pip 之後, 覺得 pip 真的是超方便。 基本上寫個 Requirements Files, 在裡面列出需要的套件以及版本, 接著執行 一個指令, pip 就會把需要的套件通通裝好。 而套件來源包含原本就可透過 easy_install 來安裝的套件, 或者是網路上的檔案, 甚至 svn, hg 或 git 都行, 對於現在許多 django 套件都放在 github 跟 bitbucket 來說, 真的是很方便的一個功能。

簡單來說明一下 pip 的 requirement file 怎麼寫, 詳細說明就看看 pip 的文件囉。

如果是透過 easy_install 就可以裝的套件, 只要寫套件名稱即可, 如:

BeautifulSoup

或是加上指定某個版本, 如:

BeautifulSoup==3.1.0.1

也可以直接裝 github 上的某個套件, 如:

-e git://github.com/jtauber/django-mailer.git#egg=django-mailer

甚至某個 changeset, 如:

-e git:[email protected][...]#egg=django-tagging-ng

當然也可以直接裝某個 tag

-e git:[email protected]#egg=django-flash

指定版本這個功能真的是滿重要的, 尤其是 github 或是 bitbucket 上的套件, 因為我在裝 django-flash 時, 發現最新的版本是有問題的 XD 或者可能新版本可能有某個功能被 deprecated。 所以指定套件版本可以避免因為套件更新, 或者不同版本間的差異, 而導致 project 無法執行的狀況。

而 requirements file 大致上如下:

BeautifulSoup==3.1.0.1  
django-flashpolicies  
http://effbot.org/downloads/Imaging-1.1.6.tar.gz  
mysql-python  
python-memcached  
-e svn+http://svn.navi.cx/misc/trunk/pycaptcha/#egg=pycaptcha
-e svn+http://code.djangoproject.com/svn/django/tags/releases/1.0.2#egg=django
-e git:[email protected]#egg=django-flash
...

所以當有人要一起 cowork, 要 deploy 他們自己的開發環境, 他們只要執行

pip install -r requirements.txt

一個指令就可以把需要的套件給裝好了, 或者是要 deploy 新的 server 的時候, 也可以直接透過相同的方式來 deploy, 方便多了。 其實在 github 上看到某些套件, 也都提供了 requirements.txt 提供安裝所需要的 dependencies。

當然, 千萬別忘記了, 要裝 github 上的東西, 你得先把 git 裝好, 要裝 svn 來源的套件, 也別忘了裝 svn 了 XD

不過 pip 如果搭配 virtualenv 才夠 high, 下一篇再來記錄 virtualenv。

tzangms

Read more posts by this author.

Subscribe to Oceanic / 海海人生

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!