1. 目前在 Windows 下除了官方提供的安裝版外,還有:
ActivePython ,這個與官方版本的區別在於提供了額外的庫和文檔,並且自動設置了PATH環境變量(後文會詳細提到)
Python(x,y),這個是我一直用並且推薦給別人用的版本。從名字就能看出來這個發行版附帶了科學計算方面的很多常用庫,另外還有大量常用庫比如用於桌面軟件界面製作的 PyQt, 還有文檔處理,exe文件生成等常用庫。另外的還有大量的工具如IDE,製圖製表工具,加強的互動shell之類。很多下文提到的軟件在此發行版中都有附帶。其他方面,Python(x, y)還附帶了手工整理出的所有庫的離線文檔,每個小版本升級都提供單獨的補丁。總的來說是很用心維護的一個發行版,十分建議安裝這個版本
2. pip 管理第三方庫
Python 的一大優勢就是有極爲大量的第三方庫,包括各個方面的引用。然而安裝第三方庫對沒有掌握方法的同學來說會變得很讓人煩惱。事實上 Python 第三方庫的安裝和管理有着一個一個唯一正確的做法,這個做法要求你什麼其他的都不用幹,只要輸入你要安裝庫的名字就可以了。
setuptools 也包在 Python(x, y) 當中。如果沒有的話,要首先先安裝 setuptools(python3後更名爲distribute) ,這個其實就是一個安裝第三方庫的軟件。選擇對應版本的 Windows Installer 進行下載和安裝後,打開一個命令行窗口,輸入:
easy_install pip
如果提示找不到程序,那麼說明你當前沒有設定好環境變量。安裝官方提供的 Python 安裝包的話肯定會有這個問題,而且很可能暫時不會修正,這就是牛逼程序員的倔強。具體做法是 右鍵我的電腦 – 屬性 – 高級系統設置 – 環境變量 – 將 C:\python2*\Scripts
加入到 PATH 那一組當中。這樣做的效果就是在任何地方的命令行下輸入命令,那麼系統會額外查找我們設定的那個目錄中的內容。之後再執行上面的命令,裝好了以後我們就要棄用 setuptools,轉投 pip。要安裝任何一個庫,你只要找到他的名字(不需要版本號),用 pip 安裝即可。譬如安裝 django,那麼輸入如下命令即可:
pip install django
其實之前 easy_install
跟 pip
效用是類似的,都是在官方的第三方庫索引 PyPI 查詢信息並進行下載和安裝。pip 的優勢在於支持更高級的功能,譬如虛擬環境,安裝失敗不會殘留破損的庫,更重要的是 pip 還可以進行卸載。輸入下面命令就能卸載一個之前由 pip 進行安裝的庫。繼續上面的例子,現在要卸載 django:
pip uninstall django
這是 setuptools 所缺失的功能。需要額外說明的是大部分純 Python 的庫都能用這個方法在 Windows 下裝上,但是需要編譯 C 語言模塊的一般都不太可能成功。遇到這種情況,在相應的庫德站點上找找有沒有對應的 Windows 安裝包。
3. 用 virtualenv 構建虛擬 Python 環境
如果你使用過 Python 做過 Web 開發,或者你有需求在本機上安裝多個版本的 Python 來測試你的代碼能否跑再 2.5, 2.6, 2.7 各個版本上,或者你的不同項目依賴於一個第三方庫的不同版本;再或者,有時候你就是想要一個沒有之前安裝過的亂七八糟的庫,一個乾淨的 Python 環境。這種時候 virtualenv 就能幫上你的忙。它能利用安裝好的 Python ,在同一臺機器上建立一個或多個互不相干的虛擬 Python 環境,且能隨時切換。如果你看到這裏還不覺得這個有什麼用處,那不妨看下去留下點印象,等哪天你有這類需求的時候能找到這個簡單實用的工具。
和其他第三方庫一樣,我們可以通過 pip 輕鬆安裝:
pip install virtualenv
安裝完成後你可以開啓一個命令行窗口,輸入 virtualenv
看看能不能找到這個腳本。如果有問題的話,請按照上面介紹過的步驟檢查下是否設置好了 PATH。之後我們可以在一個方便的地方建立一個虛擬環境。建立 C:\envs\
文件夾,命令行下 cd 到該文件夾中,輸入:
virtualenv --no-site-packages --python=C:\Python26\python.exe envtest
之後應該會看到一個叫 envtest
的文件夾。這就是一個新建立的虛擬環境(virtual enviroment)。我們不妨先激活它來看看應該怎麼用。命令行下執行 envtest\Scripts\activate.bat
,這時是你會發現命令行變成這個樣子:
(envtest) c:\>
提示符前面的 (envtest)
就是該環境已被激活的標誌。這樣你就可以在這個虛擬環境下進行工作了。執行 pip freeze
,你會發現… 你會發現什麼都沒有啊。執行 pip help
,你可以看到 pip freeze
是輸出當前 Python 環境下已經安裝的所有第三方庫。因爲我們創建此環境時開啓了選項 --no-site-packages
,意思就是在創建此虛擬環境中不從系統 Python 中把已經安裝了的庫也安裝到這裏來,所以這裏是一個乾淨的新 Python 環境。你可以在這裏調用 pip
或者 easy_install
來安裝各種你需要的庫到這個環境中來,而不會影響到你係統中 Python 的情況,所以說它是一個虛擬的 Python 環境。
我們再回頭看下 envtest
目錄的結構,其下面的 Scripts
目錄中有 python.exe
pip.exe
這些程序,在虛擬環境已激活的情況下,你調用 python
或者 pip
都是調用的此目錄中的程序。此時系統中的 python.exe
被 virtualenv 通過設置環境變量隱藏了起來。而 Lib
目錄下就是存放各種新安裝的庫。
到這裏你應該已經對 virtualenv 基本操作已經瞭解了,下面講些使用上的注意事項:
- 調用
activate.bat
開啓虛擬環境,你也可以用同目錄下的deactivate.bat
來退出該虛擬環境。 - 建立虛擬環境時的參數
--python=C:\Python26\python.exe
是用來指定你想使用 Python 程序位置,所以你可以建立多個虛擬環境來指向多個 Python 版本。另外你要注意的是如果你在系統上安裝了多個版本的 Python, 你最先安裝的一個版本會被當做主要版本,你在命令行下打python
時,調用的就是最先安裝的一個版本。其實這個是按照 PATH 中設定的路徑位置來確定的,你最好把你需要主要使用的版本相關路徑放在 PATH 環境變量中最前面。比如我的機器上,就是把C:\Python26
和C:\Python26\Scripts
作爲 PATH 最前面兩個。這樣應該就能讓保證你主要版本的正常使用。 - 當你在一個虛擬環境下工作時,假如你想在當前環境下來執行一個 Python 程序,這時你在命令行下必須執行
python foo.py
,這樣 foo.py 纔會在你當前已經激活的 virtualenv 下執行。作爲比較如果你直接執行foo.py
那麼它仍然時在系統環境下執行的。
另外,Linux 下可以使用 virtualenvwrapper 來進行方便的管理和切換各個環境,可惜的是這東西在 Windows 下用不了。但幸好有一個簡單的腳本 envdotpy 來幫助你使用。把 env.py
放到 PATH 上的目錄內,譬如 C:\Python26\Scripts
下。之後先打開裏面的 DEFAULT_DIR_PATH
變量,把它改成你集中存放 virtualenv 的地方,在我們上面的例子中就可以把這行改爲:
DEFAULT_DIR_PATH = "C:\\envs\\"
之後你就不需要專門 cd 到這個目錄,而可以在任意路徑上通過 env.py
來進行激活,切換,退出 virtualenv 了。例如執行: env.py envtest
就能激活 envtest
。執行 env.py -q
就能退出任意一個 virtualenv。
4. 避免,和解決編碼產生的問題
雖說確定 String
的編碼格式是程序員的責任,但有時候你真的不知道有些字串符到底是什麼編碼的。這裏有一個神奇 chardet 能夠幫助你。以下是摘自其頁面上的例子,很好了說明了它的作用:讀入任意一串字符,猜測其編碼格式,並且給出猜測的確信度。
>>> import urllib >>> urlread = lambda url: urllib.urlopen(url).read() >>> import chardet >>> chardet.detect(urlread("http://google.cn/")) {'encoding': 'GB2312', 'confidence': 0.99} >>> chardet.detect(urlread("http://yahoo.co.jp/")) {'encoding': 'EUC-JP', 'confidence': 0.99} >>> chardet.detect(urlread("http://amazon.co.jp/")) {'encoding': 'SHIFT_JIS', 'confidence': 1} >>> chardet.detect(urlread("http://pravda.ru/")) {'encoding': 'windows-1251', 'confidence': 0.9355}
如果 confidence 非常低的話或者 chardet 直接報錯,多半是字串經過多次錯誤編碼解碼,要從別的地方找辦法解決問題。
5. Vim Python開發 相關資源
事實上我現在自己是在用 Vim 寫 Python,感覺也蠻不錯。以下是相關資源。
- UltimateVimPythonSetup 比較新的一個專門針對 Python 的 Vim 配置文件。
- Vim as Python IDE 只要搜 Python 和 Vim 就一定會找到這一篇文章。
- vimcolorschemetest 所有的Vim 配色方案都在集結在這裏。
- Python 相關 Vim 插件
pythoncomplete.vim 按上面的介紹配置一下,在自動輸入的時候按Ctrl-X, Ctrl-O就有很強力的自動補全了。
python.vim 加強語法的高亮。
pyflakes.vim 很棒的語法檢查,分析你的語法看避免低級錯誤。注意這個在Vim7.2下才有用, 如果是7.1則一點效果都沒有…