Python生態環境簡介[轉]

Python生態環境簡介

做者: Mir Nazim
原文: Python Ecosystem - An Introduction
譯者: dccrazyboy 
原譯: Python生態環境簡介

當開發人員從PHP,Ruby或者別的開發環境轉換到Python時,所面對的最大問題是缺少對Python開發的生態環境的充分理解。開發人員很是想獲得一份關於完成大多數任務的指南或資源,而不論使用的方法是否規範。html

下文所講到的基本上都來源於個人網站,那存儲着Python環境下對於網絡應用開發的一些基本資料,這些資料是爲那些從別的平臺轉到Python開發的實習生,研究生和有經驗的開發者準備的。python

這不是一個完美的文檔,個人目標是將它作成一個永久的文檔,希望這篇文檔能夠發展成爲一個詳細的教程。linux

目標讀者

這不是一本關於Python的語法書。 這個教程不會教你花哨的Python用法讓你成爲一名Python黑客。 我默認你已經瞭解Python的基礎用法。若是你不知道,別往下看了。 先去看看Zed Shaw的免費教Python入門的書《Learn Python The Hard Way》git

我不知道你是否是在用Linux(最好是Ubuntu/Debian)或者是類Linux系統。 爲毛?由於Linux是我最瞭解的系統。 除了測試跨瀏覽器兼容性之外,我從沒在Windows或者Max OS X上面開發過。 下面是如何在不一樣平臺安裝Python的教程。github

去搜索下最適合你平臺的Python安裝方法。我強烈創建問Stack Overflow。web

版本之惑

Python 2.x是一個穩定的版本,Python 3是個新的版本。若是你不在意,跳過這段直接看下面的Python安裝部分。sql

當開始學習Python時,安個3.x的版本看上去應該是第一步,但它可能並不必定是你想要的。shell

如今Python有兩個正在開發的版本-2.7.x和3.x(也被成爲Python3,Py3k或Python 3000)。 跟Python2相比Python3就是另一個語言。它們之間存在者或大或小的語法差別。 現今Python2.6/2.7是被安裝和應用的最爲普遍的版本。 許多的主流代碼和一些重要的packages/frameworks/tools/utilities/modules並不支持Python3。數據庫

所以,最安全的選擇是使用2.x(2.7最好)版本。若是你徹底瞭解Python3的話在再用它。django

Python 3 Wall of Shame 列出了不少包在Python3中的兼容性。在決定用Python3以前好好看看這個。

VM挑選

Python解釋器或Python虛擬機有不少種實現,CPython是最主流的實現。CPython同時也是別的虛擬機實現的參考解釋器。

PyPy是用Python實現的Python解釋器,Jython是用Jave實現運行在JVM上的解釋器,IronPython是用Microsoft .NET CLR實現的解釋器。

除非解釋器的選擇很是很是重要,咱們通常都用CPython。

若是上面那些關於版本和虛擬機的廢話讓你頭疼,那你就安裝CPython的2.7.x版本,相信我!

安裝Python

大多數的Linux/Unix系統的Max OS X都自帶Python。若是沒有或者版本太低,你能夠經過下面的命令安裝:

Ubuntu/Debian及其衍生系統:

$ sudo apt-get install python2.7

sudo 是一個是類Unix系統的一個命令,它容許用戶以別的用戶(通常是超級用戶,或者root)的權限運行程序。 更多請查閱Wikipedia

Fedora/Red Hat及相似系統:

sudo yum install python2.7

使用RHEL你可能須要打開EPEL Repositories才能安裝。

從這起,我將在例子中使用sudo,你須要根據你的系統進行更改。

理解包

你首先須要理解的是Python沒有一個默認的包管理設施。事實上,包的概念在Python中是至關弱的。

可能你已經知道,Python代碼被組織爲模塊。 一個模塊可能由包含一個函數的單一文件組成,也可能由包含多個模塊的目錄組成。 包和模塊的區別很是小,而且每一個模塊都能被理解爲包。

那麼包和模塊的區別究竟是什麼(若是有的話)?爲了明白這個,你首先應該明白Python是如何查找模塊的。

如同別的編程環境同樣,Python中的一些函數和類(例如str,len,Exception等)在全局(叫作內置函數)都是可用的。 別的就須要經過手動import 進來。例如:

>>> import os
>>> from os.path import basename, dirname

這個包必定存在你的機子上,這樣才能被import語句導入。但Python是如何知道這些模塊的位置呢? 這些位置信息在你安裝Python虛擬機時就被自動設置好了,而且依賴於你的目標平臺。

包的路徑能夠在sys.path中查詢。下面是在個人筆記本上的結果,運行環境是Ubuntu 11.10。

>>> import sys

>>> print sys.path

['',

 '/usr/lib/python2.7',

 '/usr/lib/python2.7/plat-linux2',

 '/usr/lib/python2.7/lib-tk',

 '/usr/lib/python2.7/lib-old',

 '/usr/lib/python2.7/lib-dynload',

 '/usr/local/lib/python2.7/dist-packages',

 '/usr/lib/python2.7/dist-packages',

 '/usr/lib/python2.7/dist-packages/PIL',

 '/usr/lib/python2.7/dist-packages/gst-0.10',

 '/usr/lib/python2.7/dist-packages/gtk-2.0',

 '/usr/lib/pymodules/python2.7',

 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',

 '/usr/lib/python2.7/dist-packages/ubuntuone-client',

 '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',

 '/usr/lib/python2.7/dist-packages/ubuntuone-couch',

 '/usr/lib/python2.7/dist-packages/ubuntuone-installer',

 '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

這裏給出了Python搜索包的路徑。它將從最上面開始找,直到找到一個名字相符的。 這代表若是兩個不一樣的路徑分別包含了兩個具備相同名字的包,搜索將在找到第一個名字的時候中止,而後將永遠不會往下查找。

正如你所猜的,包搜索路徑很容易被劫持,爲了確保Python首先載入你的包,所需作的以下:

>>> sys.path.insert(0, '/path/to/my/packages')

儘管這個方法在不少狀況下都很好用,但必定要當心不要濫用。 只有當必要時再使用!不要濫用!

site 模塊控制包的搜索路徑。當Python虛擬機初始化時它會子同被導入。若是你想了解更多信息,請看 官方文檔 。

PYTHONPATH變量

PYTHONPATH 是一個用來增長默認包搜索目錄的環境變量。能夠認爲它是對於Python的一個特殊的 PATH 變量。 它僅僅是一個經過 :分割,包含Python模塊目錄的列表(並非相似於 sys.path 的Python list)。 它可能就相似下面這樣:

export PYTHONPATH=/path/to/some/directory:/path/to/another/directory:/path/to/yet/another/directory

有時候你可能並不想覆蓋掉現存的 PYTHONPATH ,而僅僅是但願添加新目錄到頭部或尾部。

export PYTHONPATH=$PYTHONPATH:/path/to/some/directory    # Append
export PYTHONPATH=/path/to/some/directory:$PYTHONPATH    # Prepend

PYTHONPATH , sys.path.insert 這些方法並不是完美,咱們最好也不要用這些方法。 使用它們,你可能能夠解決本地的開發環境問題,但它在別的環境下也許並不適用。 有不少種方法能夠達到這個效果,在下面我將一一闡述。

咱們如今明白的Python如何找到安裝的包路徑,如今讓咱們回到開始那個問題。 模塊和包的區別究竟是什麼?包是一個模塊或模塊/子模塊的集合,通常狀況下被壓縮到一個壓縮包中。 其中包含1)依賴信息 2)將文件拷貝到標準的包搜索路徑的指令。3)編譯指令(若是在安裝前代碼必須被編譯的話)。 就這些東西!

第三方包

從一開始,若是要作一些實際Python開發,你必定會用到一些第三方包。

在Linux系統上至少有3種安裝第三方包的方法。

  1. 使用系統自帶的包管理系統(deb, rpm, 等)
  2. 經過社區開發的各類工具,例如 pip , easy_install 等
  3. 從源文件安裝

這三個方面,幾乎完成一樣的事情。即:安裝依賴,編譯代碼(若是須要的話),將一個包含模塊的包複製的標準軟件包搜索位置。

第二步和第三步在全部的操做系統上基本相同。 我再次但願您能夠在 Stack Overflow 上找到你的平臺的第三方包安裝方法。

在哪找第三方包?

在安裝第三方包以前,你首先要找到他們。如下是幾種方法:

  1. 你的系統包管理器中的發行版專用包。
  2. Python Package Index (or PyPI)
  3. 大量的源代碼服務器,例如 LaunchpadGitHubBitBucket 等

經過發行版專用包安裝

經過包管理器安裝包安裝包就像使用命令行或者GUI安裝別的軟件那樣簡單。 例如在Ubuntu中安裝 simplejson

$ sudo apt-get install python-simplejson

經過pip安裝

easy_install漸漸再也不流行。咱們將主要介紹pip,它是easy_install的一個替代品。

pip是一個用來安裝和管理Python包的工具,就如同Python Packet Index同樣。 pip並無隨着Python一塊兒安裝,所以咱們須要先安裝它。Linux下,通常這樣安裝:

$ sudo apt-get install python-pip

在安裝任何其餘包以前,我老是經過PyPI將pip升級到最新版本的, Ubuntu軟件庫中的版本廣泛落後的PyPI。我經過pip升級pip它本身。

$ sudo pip install pip --upgrade

如今若是須要安裝任何包,你能夠運行 pip install package-name 命令。 因此能夠經過下面命令安裝 simplejson:

$ sudo pip install simplejson

刪除包也很簡單。

$ sudo pip uninstall simplejson

通常狀況下, pip 會從PyPI自動安裝最新的穩定版, 但有時咱們須要安裝一個特定版本的包,由於你的項目可能基於特殊的版本。 所以你可能須要使用相似以下的 pip install 命令:

$ sudo pip install simplejson==2.2.1

咱們可能須要升級/降級/從新安裝包。此時能夠經過下面的命令完成:

$ sudo pip install simplejson --upgrade         # Upgrade a package to the latest version from PyPI
$ sudo pip install simplejson==2.2.1 --upgrade  # Upgrade/downgrade a package to a given version

如今,若是你想安裝一個處於開發版本的包,它在版本控制倉庫有,可是PyPI中尚未怎麼辦? pip 可以很好的處理這種狀況,但在這以前,你須要本身安裝這個版本控制倉庫。Ubuntu下,你能夠以下安裝:

$ sudo apt-get install git-core mercurial subversion

安裝版本控制倉庫以後,從版本控制倉庫安裝包就以下所示:

$ sudo pip install git+http://hostname_or_ip/path/to/git-repo#egg=packagename
$ sudo pip install hg+http://hostname_or_ip/path/to/hg-repo#egg=packagename
$ sudo pip install svn+http://hostname_or_ip/path/to/svn-repo#egg=packagename

你也能夠一樣簡單的從本地倉庫安裝,注意下面的三斜槓是文件目錄。

$ sudo pip install git+file:///path/to/local/repository

有一點須要注意,若是使用 git 協議安裝,你須要使用 git+git 前綴:

$ sudo pip install git+git://hostname_or_ip/path/to/git-repo#egg=packagename

如今你可能會好奇這些 egg 會被怎麼使用。 如今你須要明白的是一個egg是一個被壓縮的Python包,裏面包含了源代碼和一些元數據。pip 在安裝包前創建了egg信息。你能夠在代碼倉庫的 setup.py 文件中找到egg名字。 找到 setup 塊而後找到相似於name="something" 的字段。 它可能看起來就像以下的代碼(這段代碼從simplejson的 srtup.py 獲得)同樣。

setup(

name="simplejson", # <--- This is your egg name

version=VERSION,

description=DESCRIPTION,

long_description=LONG_DESCRIPTION,

classifiers=CLASSIFIERS,

author="Bob Ippolito",

author_email="bob@redivi.com",

url="http://github.com/simplejson/simplejson",

license="MIT License",

packages=['simplejson', 'simplejson.tests'],

platforms=['any'],

**kw)

若是沒有 setup.py 文件咋辦?這樣如何找到egg名?其實咱們不須要。 把包源碼拷貝到你的工程目錄下,而後導入進去就能夠直接用了。

--user 選項

上面的全部例子把包都安裝到系統範圍。若是你在 pip install 時使用 --user 選項,包將被安裝到 ~/.local 目錄下。在個人機子上,以下所示:

$ pip install --user markdown2

Downloading/unpacking markdown2

  Downloading markdown2-1.0.1.19.zip (130Kb): 130Kb downloaded

  Running setup.py egg_info for package markdown2



Installing collected packages: markdown2

  Running setup.py install for markdown2

    warning: build_py: byte-compiling is disabled, skipping.



    changing mode of build/scripts-2.7/markdown2 from 664 to 775

    warning: install_lib: byte-compiling is disabled, skipping.





    changing mode of /home/mir/.local/bin/markdown2 to 775

Successfully installed markdown2

Cleaning up...

注意: markdown2 被安裝到 /home/mir/.local/bin/markdown2 這個目錄下。

有不少緣由使你不想將包安裝到系統目錄中。 稍後我將講解如何對於每一個項目設置獨立的Python環境。

從源碼安裝

從源碼安裝包僅僅須要一個命令,解壓這個包到一個目錄,而後執行下面的命令。

cd /path/to/package/directory

python setup.py install

儘管這些安裝的辦法並無什麼不一樣,但 pip 方式是最好的。 pip 讓你擁有輕鬆升級/降級包的能力,而手動安裝你就不得不去手動下載,解壓的安裝。 手動安裝包應該使你最後一個選擇,若是別的所有失敗了(通常不太可能)。

安裝須要編譯的包

咱們如今已經瞭解了大多數包的安裝方法,但有些包尚未介紹:包含C/C++代碼的Python包,它們須要在安裝前被編譯。 關於這些包最好的例子是數據庫適配器,圖片處理庫等。

雖然 pip 能夠處理編譯安裝的源碼,但我我的更喜歡使用發行版的包管理器提供的包。 它將會安裝編譯好的二進制文件。

若是你仍是想用 pip 安裝,下面是在Ubuntu系統上須要作的。

編譯器的相關工具:

$ sudo apt-get install build-essential

Python開發環境(頭文件等):

$ sudo aptitude install python-dev-all

若是你的系統沒有 python-dev-all ,看看這些類似的名字 python-dev , python2.X-dev 等等。

確保你已經安裝了 psycopg2 (PostgreSQL RDBMS adapter for Python),你將須要PostgreSQL的開發文件。

$ sudo aptitude install  postgresql-server-dev-all

完成這些依賴的安裝後,你就能運行 pip install 了。

$ sudo pip install psycopg2

還須要注意一點: 並非全部的包都能經過pip編譯安裝! 。 但若是你對編譯安裝頗有自信,或者已經對於如何在本身的目標平臺安裝有足夠的經驗。 那就大膽的手動安裝吧!

Python開發環境

不一樣的人喜歡用不一樣的方式創建各自的開發環境,但在幾乎全部的編程社區,總有一個(或一個以上)開發環境讓人更容易接受。 使用不一樣的開發環境雖然沒有什麼錯誤,但有些環境設置更容易進行便利的測試,並作一些重複/模板化的任務,使得在天天的平常工做簡單並易於維護。

virtualenv

在Python的開發環境的最經常使用的方法是使用virtualenv包。 Virtualenv是一個用來建立獨立的Python環境的包。如今,出現了這樣的問題:爲何咱們須要一個獨立的Python環境? 要回答這個問題,請容許我引用virtualenv本身的文檔:

咱們須要處理的基本問題是包的依賴、版本和間接權限問題。想象一下,你有兩個應用,一個應用須要libfoo的版本1,而另外一應用須要版本2。如何才能同時使用這些應用程序?若是您安裝到的/usr/lib/python2.7/site-packages(或任何平臺的標準位置)的一切,在這種狀況下,您可能會不當心升級不該該升級的應用程序。

簡單地說,你能夠爲每一個項目創建不一樣的/獨立的Python環境,你將爲每一個項目安裝全部須要的軟件包到它們各自獨立的環境中。

使用 pip 命令來安裝virtualenv:

$ sudo pip install virtualenv

virtualenv安裝完畢後,能夠經過運行下面的命令來爲你的項目建立獨立的python環境。

$ mkdir my_project_venv

$ virtualenv --distribute my_project_venv

# The output will something like:

New python executable in my_project_venv/bin/python

Installing distribute.............................................done.

Installing pip.....................done.

上面發生了什麼?你建立了文件夾 my_project_venv 來存儲你的新的獨立Python環境。 --distribute 選項使virtualenv使用新的基於發行版的包管理系統而不是 setuptools 得到的包。 你如今須要知道的就是 --distribute 選項會自動在新的虛擬環境中安裝 pip,這樣就不須要手動安裝了。 當你成爲一個更有經驗的Python開發者,你就會明白其中細節。

如今看看 my_project_venv 目錄,你會看到這樣的結構:

# 這裏只列出了將被討論的目錄和文件

.

|-- bin

|   |-- activate  # <-- 這個virtualenv的激活文件

|   |-- pip       # <-- 這個virtualenv的獨立pip

|   `-- python    # <-- python解釋器的一個副本

`-- lib

    `-- python2.7 # <-- 全部的新包會被存在這

經過下面的命令激活這個virtualenv:

$ cd my_project_venv

$ source bin/activate

執行完畢後,提示多是這個樣子的:

(my_project_venv)$ # the virtualenv name prepended to the prompt

經過 deactivate 命令離開virtualenv環境

(my_project_venv)$ deactivate

運行下面的命令能夠更好地理解二者的差別,若是已經進入virtualenv請先離開。

首先讓咱們看看若是調用python/pip命令它會調用那一個。

$ which python

/usr/bin/python

$ which pip

/usr/local/bin/pip

再來一次!此次打開virtualenv,而後看看有什麼不一樣。個人機子上顯示以下:

$ cd my_project_venv

$ source bin/activate

(my_project_venv)$ which python

/home/mir/my_project_venv/bin/python

(my_project_venv)$ which pip

/home/mir/my_project_venv/bin/pip

virtualenv拷貝了Python可執行文件的副本,並建立一些有用的腳本和安裝了項目須要的軟件包,你能夠在項目的整個生命週期中安裝/升級/刪除這些包。 它也修改了一些搜索路徑,例如PYTHONPATH,以確保:

  1. 當安裝包時,它們被安裝在當前活動的virtualenv裏,而不是系統範圍內的Python路徑
  2. 當import代碼時,virtualenv將優先採起本環境中安裝的包,而不是系統Python目錄中安裝的包。

還有一點比較重要,在默認狀況下,全部安裝在系統範圍內的包對於virtualenv是可見的。 這意味着若是你將simplejson安裝在您的系統Python目錄中,它會自動提供給全部的virtualenvs使用。 這種行爲能夠被更改,在建立virtualenv時增長 --no-site-packages 選項的virtualenv就不會讀取系統包,以下:

$ virtualenv my_project_venv --no-site-packages

virtualenvwrapper

virtualenvwrapper 是一個創建在 virtualenv 上的工具,經過它能夠方便的建立/激活/管理/銷燬虛擬環境,沒它的話進行上面的操做將會至關麻煩。 能夠經過下面命令安裝 virtualenvwrapper 。

$ sudo pip install virtualenvwrapper

安裝後,你須要配置它。下面是個人配置:

if [ `id -u` != '0' ]; then

  export VIRTUALENV_USE_DISTRIBUTE=1        # <-- Always use pip/distribute

  export WORKON_HOME=$HOME/.virtualenvs       # <-- Where all virtualenvs will be stored

  source /usr/local/bin/virtualenvwrapper.sh

  export PIP_VIRTUALENV_BASE=$WORKON_HOME

  export PIP_RESPECT_VIRTUALENV=true

fi

設置 WORKON_HOME 和 source /usr/local/bin/virtualenvwrapper.sh 只須要幾行代碼,別的部分是按照我我的喜愛添加的。

將上面的配置添加到 ~/.bashrc 的末尾,而後將下面的命令運行一次:

$ source ~/.bashrc

若是你關閉全部的shell窗口和標籤,而後再打開一個新的shell窗口或標籤時, ~/.bashrc 也會被執行,此時將會自動的更新你的virtualenvwrapper 配置。 效果就跟執行上面的命令同樣。

新建/激活/關閉/刪除虛擬空間須要執行下面的命令:

$ mkvirtualenv my_project_venv

$ workon my_project_venv

$ deactivate

$ rmvirtualenv my_project_venv

Tab補全在virtualenvwrapper中是可用的哦~

前往 virtualenvwrapper 主頁 查找更多關於它的信息。

經過pip和virtualenv進行依賴管理

pip 結合 virtualenv 能夠爲你的項目提供基本的依賴管理。

你能夠經過 pip freeze 命令來查看當前已安裝的包版本。下面列出的是我寫着個博客所用到的包的版本:

$ pip freeze -l

Jinja2==2.6

PyYAML==3.10

Pygments==1.4

distribute==0.6.19

markdown2==1.0.1.19

注意 -l 選項,它告訴 pip 只導出當前活動虛擬空間中安裝的包,排除那些全局空間安裝的包。

你能夠把結果保存到文件裏,而後將它添加到你的版本控制系統裏。

$ pip freeze -l  > requirements.txt

同時 pip 也能從一個包含 pip freeze 命令的文件中安裝包。

$ pip install -r requirements.txt

其餘重要工具

雖然咱們討論了基本的Python版本,虛擬機和包管理,但在平常工做中咱們仍然還須要一些專用的工具來完成任務。 儘管我不能把每個工具的細節都講到,然而我仍是儘可能給你提供基本的概述。

編輯器

對於Python編程有大量很優秀的編譯器。對於我我的而言,我更傾向於Vim,但這裏我並不想挑起一場 編輯器戰爭 。

有大量支持Python的編輯器,例如:Vim/Gvim, Emacs, GNOME上的GEdit, KDE上的Kate, Scribes, ActiveState的Komodo Edit/IDE, WingWare的Wing IDE, JetBrains上PyCharm, Eclipse的PyDEV插件。此外,還有其餘,但這些彷佛是最流行的。你能夠任意選擇最適合你的。

Pyflakes:源碼檢測工具

Pyflakes是一個檢查Python源碼並經過文本分析找出錯誤的工具。 它能夠檢測出語法錯誤,和(部分)邏輯錯誤,導入但未使用的模塊,只使用一次的變量,等等。

你能夠經過 pip 安裝:

$ pip install pyflakes

在命令行調用它,參數填源文件名便可,以下所示:

$ pyflakes filename.py

Pyflakes也可已被集成進編輯器。這是它在個人vim中的樣子。注意紅波浪線:

images/vim-pyflakes.png

請自行前往Stack Overflow找出如何將Pyflakes添加到編輯器。

Pyflakes官網

Requests:一個HTTP庫

Requests是一個將處理HTTP請求變得垂手可得的庫。

一樣是經過 pip 安裝它:

$ pip install requests

下面是一個例子:

>>> import requests

>>> r = requests.get('https://api.github.com', auth=('user', 'pass'))

>>> r.status_code

204

>>> r.headers['content-type']

'application/json'

>>> r.content

...

Requests文檔

Flask:一個web開發的微框架

Flask是一個基於Werkzeug和Jinja2的微框架。

經過 pip 安裝:

$ pip install Flask

這是一個簡單的例子:

from flask import Flask

app = Flask(__name__)



@app.route("/")

def hello():

    return "Hello World!"



if __name__ == "__main__":

    app.run()

能夠這樣運行它:

$ python hello.py

 * Running on http://localhost:5000/

Flask官網

Django:一個全棧式web開發框架

Django是一個全棧式web開發框架。它提供了ORM,HTTP庫,表單處理,XSS過濾,模板和別的特性。

經過 pip 安裝:

$ pip install Django

去 Django官網 查找更多信息。

Fabric:簡化SSH的使用並部署系統管理員任務

Fabric是一個命令行工具用來簡化程序對於SSH的使用或運行系統管理員任務。 它提供了一個基本套件能夠執行本地或遠程shell命令(正常或經過sudo),上傳/下載文件,以及其餘輔助功能,如提示用戶輸入,或停止執行的操做。

能夠經過 pip 安裝:

$ pip install fabric

這是一個經過Fabric寫的任務:

from fabric.api import run



def host_type():

    run('uname -s')

你能夠在一臺或多臺服務器上執行這個命令:

$ fab -H localhost host_type

[localhost] run: uname -s

[localhost] out: Linux



Done.

Disconnecting from localhost... done.

Fabric官網

SciPy:一個科學計算庫

若是你的工做涉及科學和數值計算,SciPy的是您不可或缺的重要工具。

SciPy官網這樣介紹:

SciPy的(讀作「Sigh Pie」)是數學、科學和工程方面的開源庫。 這也是Python在數值計算方面很是優秀的一個庫。 SciPy的庫依賴於NumPy,它提供了方便快速的N維矩陣操做。 SciPy庫與NumPy中的矩陣兼容,並提供了許多用戶友好且高效率的數值程序,如數值的積分和優化。 同時,他們運行在全部流行的操做系統上,安裝快速,而且都是免費的。NumPy和SciPy易於使用,但功能強大,足以知足一些世界領先的科學家和工程師。 若是您須要在電腦上處理數字、顯示或公佈結果,試試SciPy吧!

SciPy

PEP 8:Python風格指南

雖然它自己不是一個軟件工具,但它倒是Python一個重要的資源。

PEP 8是一個描述Python發行版中基本庫的編碼約定的文檔。 這份文檔的但願可以約定全世界Python開發者的代碼佈局,變量、類、函數的命名規則。 請確保你瞭解它,並遵循它。他將在將來的Python使用中帶來至關多的益處。

PEP 0008

強大的Python標準庫

Python的標準庫涵蓋很是普遍,提供各類各樣的功能。 該庫包含的內置模塊(使用C編寫的)提供了訪問系統的功能,如文件I/O, 而且存在大量Python編寫的模塊,他們提供標準化的解決方案去解決平常的編程中出現的許多問題。 這些模塊都明確地抽離平臺的細節,提供平臺無關的API,旨在增強Python程序的跨平臺可移植性。

推薦閱讀

David Goodger的 Code Like a Pythonista: Idiomatic Python 包含了不少實用的Python例子和技術。

Doug Hellmann的 Python Module of the Week 系列的重點是建設一個使用Python標準庫中的模塊的示例代碼的倉庫。

贈言

這個教程到目前爲止,所講述的僅是點到爲止。Python世界中有大量的工具,庫和軟件能夠幫你完成你的工做。 但你須要本身花時間去發現他們!

Python有一個偉大的社區和一羣很聰明的維護者,他們對於新手很是有耐心。 所以,關注你最喜歡的開源項目,加入他們的郵件列表,跟有經驗的開發者交流經驗。 不久的未來,你的經驗也將足夠豐富,你將會成爲他們其中的一員。

最後我想引用下 Zen Of Python 。咱們思考,學習,受到啓發! Happy Pythoning

>>> import this

The Zen of Python, by Tim Peters



Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren't special enough to break the rules.

Although practicality beats purity.

Errors should never pass silently.

Unless explicitly silenced.

In the face of ambiguity, refuse the temptation to guess.

There should be one-- and preferably only one --obvious way to do it.

Although that way may not be obvious at first unless you're Dutch.

Now is better than never.

Although never is often better than *right* now.

If the implementation is hard to explain, it's a bad idea.

If the implementation is easy to explain, it may be a good idea.

Namespaces are one honking great idea -- let's do more of those!

============================================

相關文章
相關標籤/搜索