因其開源的特性,Python社群會依據不同需求,把Python直譯器(命令列介面)、圖形化介面工具(編輯器、檔案瀏覽視窗、功能選單等)、第三方套件及套件管理工具整合成不同的Python發行版本。然而,Python官網所提供的發行版本並不包含用於科學計算的第三方套件,另外,Linux、Mac OS X也只內建Python直譯器,因此若想快速建立用於科學計算的Python開發環境,可考慮安裝以下其中一個Python發行版本(它們的官網都有下載連結及針對Linux、Mac OS X、Windows三個作業系統的個別安裝說明):
這兩個Python發行版本至少都包含NumPy、SciPy、Matplotlib這幾個用於科學計算的第三方套件,讓使用者可以完成檔案讀寫、矩陣運算、畫圖、線性代數、積分、內插、訊號與影像分析、解微分方程...等科學運算用途。這兩個發行版本也包含IPython 互動式命令列介面,相較於預設的Python命令列介面,它有指令補齊、執行系統指令、瀏覽輸入過的程式碼...等進階功能。我會在"IPython簡介及使用範例"一節中簡介IPython,至於其他套件會在本系列文章中的"Python 基本語法與科學計算套件的使用"做介紹。以下為Anaconda內建的整合開發環境Spyder(上圖)及Enthought Canopy(下圖)的視窗截圖:
上述Python發行版本固然安裝方便,但它們也包含了目前你可能不會用到的套件而佔掉電腦資源,若你目前只想要安裝基本常用的科學運算套件,等到以後有需要時再擴充其他套件,可選擇自行擴充Python科學運算套件。因為Linux及Mac OS X 已內建Python直譯器,所以基本常用的科學運算套件可透過作業系統的套件管理工具 (apt-get install 、yum install、port install) 擴充:
sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
sudo yum install numpy scipy python-matplotlib ipython python-pandas sympy python-nose
sudo port install py27-numpy py27-scipy py27-matplotlib py27-ipython +notebook py27-pandas py27-sympy py27-nose
詳細請參考安裝說明。
當有需要擴充其他套件時,可以透過Python 套件管理程式pip安裝:
pip install 欲安裝的套件名稱
如"快速建立用於科學計算的Python開發環境"一節的圖所示,Anaconda內建的Spyder及Enthought Canopy都是方便編輯及執行Python程式的整合開發環境,不過你也可以用文字編輯器(如Atom、Vim)編寫Python程式,然後在終端機下執行程式(見下圖)。
以下文章有說明如何將Atom和Vim編輯器設定成易於開發Python程式的環境:
註:PEP8 - Python 社群慣用的程式碼風格指南: 因Python開源的特性,自己寫的程式可能會被別人擴充應用,或需要與別人協作開發程式,為幫助開發者寫出易讀且一致的程式碼,Python 官方於是提供關於程式碼排版、註解、命名等風格的指南。Atom及Vim都有外掛能偵測所寫的程式碼是符合PEP8。
IPython是強化版的互動式Python命令列介面,它比預設的Python命令列介面多了許多進階功能,例如:
在Anaconda及Enthought Canopy的整合開發環境中,已有IPython的視窗可直接使用(見"快速建立用於科學計算的Python開發環境"一節的截圖)。你也可以在終端機中輸入ipython進入IPython命令列介面。以下為幾個IPyhon的使用範例:
In [1]:
#引入astropy套件並查看相關資訊
import astropy
astropy?
In [2]:
!pwd #使用指令pwd列出目錄位置
In [3]:
# 將所創建的檔案路徑存成一個list
!mkdir input_files
!touch input_files/data01.txt input_files/data02.txt input_files/data03.txt
file_list = !ls input_files/*
!rm -r input_files
file_list
Out[3]:
In [4]:
Messier = {'M1': ["Crab Nebula", "NGC1952" , "Taurus A"], 'M31': ["Andromeda Galaxy", "NGC 224"]}
type(Messier)
Out[4]:
In [5]:
#列出所有曾輸入過的指令
%history
In [6]:
print(In[4]) #IPython 以In及Out變數分別儲存歷史指令及指令的輸出結果
print(Out[3])
更多關於IPython的使用,請參考官方文件及以下的IPython教學影片:
In [7]:
from IPython.display import YouTubeVideo
YouTubeVideo("bP8ydKBCZiY")
Out[7]:
Python的官方教學文件以及上述第三方套件的官方教學文件都提供詳細的說明及範例,而AstroPython網站也有給天文研究人員的Python入門指南。此外,Python的台灣使用者社群網站也羅列了許多學習資源。以下列出我所整理的學習資源:
基礎語法
科學計算/天文研究