国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一篇文章入門Python生態系統

dadong / 1819人閱讀

摘要:你使用的系統自帶的包管理器包索引也被稱為各種源碼托管服務,如,,等。通過系統自帶的包管理器安裝使用系統自帶的包管理器安裝,只需要在命令行輸入相應命令,或是使用你用來安裝其他應用的應用即可。

譯者按:原文寫于2011年末,雖然文中關于Python 3的一些說法可以說已經不成立了,但是作為一篇面向從其他語言轉型到Python的程序員來說,本文對Python的生態系統還是做了較為全面的介紹。文中提到了一些第三方庫,但是Python社區中強大的第三方庫并不止這些,歡迎各位Pytonistas補充。

原文鏈接:http://mirnazim.org/writings/python-ecosystem-introduction/
譯文鏈接:http://codingpy.com/article/python-ecosystem-introduction/

開發者從PHP、Ruby或其他語言轉到Python時,最常碰到的第一個障礙,就是缺乏對Python生態系統的全面了解。開發者經常希望能有一個教程或是資源,向他們介紹如何以大致標準的方式完成大部分的任務。

本文中的內容,是對我所在公司內部維基百科的摘錄,記錄了面向網絡應用開發的Python生態系統基礎知識,目標受眾則是公司實習生、培訓人員以及從其他語言轉型到Python的資深開發者。

文中所列的內容或資源是不完整的。我也打算把它當成一項一直在進行中的工作(work in perpetual progress)。希望經過不斷的增補修訂,本文會成為Python生態系統方面的一篇詳盡教程。

目標受眾

本文的目的,不是教大家Python編程語言。讀完這篇教程,你也不會瞬間變成一名Python高手。我假設大家已經有一定的Python基礎。如果你是初學者,那么別再繼續讀下去了。先去看看Zed Shaw所寫的《笨辦法學Python》,這是本質量很高的免費電子書,看完之后再回頭閱讀這篇教程吧。

我假設你們使用的是Linux(最好是Ubuntu/Debian)或是類Linux操作系統。為什么?因為這是我最熟悉的系統。我在Windows平臺或Mac OS X平臺上,沒有專業的編程經驗,只是測試過不同瀏覽器的兼容性。如果你用的是這兩個平臺,那么請參考下面的資料安裝Python。

Python 101: Setting up Python on Windows

Official documentation for Python on Windows

Official documentation for Python on Mac OS X

你還可使用搜索引擎,查找你使用的操作系統中安裝Python的最好方法。如果你有什么疑問,我強烈建議你去Stack Overflow平臺上提問。

該選擇哪個版本?

Python 2.x是目前的主流;Python 3是嶄新的未來。如果你不關心這個問題,可以直接跳到下面的Python安裝部分。(譯者注:原文作者寫這篇文章時是2011年,當時Python 3才發展沒幾年。)

剛接觸Python的話,安裝3.x版本看上去是很自然的第一步,但是這可能并不是你想要的。

目前有兩個積極開發中的Python版本——2.7.x與3.x(也被稱為Python 3, Py3K和Python 3000)。Python 3是一個不同于Python 2的語言。二者在語義、語法上,既存在細微的區別,又有著截然不同的一面。截至今天,Python2.6/2.7是安裝數量和使用度最高的版本。許多主流的Python庫、框架、工具都沒有做到100%兼容Python 3。

因此,最穩妥的選擇就是使用2.x版(更準確的說,即2.7.x)。務必只在你需要或者完全了解情況的前提下,才選擇Python 3。

Python 3 Wall of Shame網站記錄了Python 3對各種庫的兼容情況。在使用Python 3之前,仔細查閱下這個網站的內容。

譯者注:現在,主流第三方庫和框架對Python 3的支持度已經很高。根據py3readiness網站的統計,360個最受歡迎的Python包中已經有315個支持Python 3。具體的支持情況,可以查看這個網站。一定程度上說,Python 3已經成為新的主流。

使用哪種虛擬機

Python的解釋器,又叫做Python虛擬機,它有多種不同的實現。其中,主流實現方式是CPython,裝機量也最高,同時也是其他虛擬機的參考實現。

PyPy是利用Python語言實現的Python;Jython則使用Java實現,并運行在Java虛擬機之上;IronPython是用.NET CLR實現的Python。

除非真的有重大理由,否則應該選擇CPython版本的實現,避免出現意外情況。

如果這些有關版本和虛擬機的嘮叨話讓你讀了頭疼,那你只需要使用CPython 2.7.x即可。

Python安裝

大部分Linux/Unix發行版和Mac OS X都預裝了Python。如果你沒有安裝或者已有的版本比較舊,那么你可以通過下面的命令安裝2.7.x版:

Ubuntu/Debian及其衍生系統

$ sudo apt-get install python2.7

sudo是類Unix系統中的一個程序,可以讓用戶以其他用戶的權限(通常是超級用戶或root用戶)運行程序。

Fedora/Red Hat及類似系統

sudo yum install python2.7

在RHEL(Red Hat Enterprise Linux的縮寫)平臺上,你可能需要啟用EPEL軟件源(repositories),才能正常安裝。

在本文后面的示例中,我會使用sudo程序;你應將其替換為自己版本中的相應命令或程序。

理解Python的包(package)

首先你需要了解的是,Python沒有默認的包管理工具。事實上,Python語言中包的概念,也是十分松散的。

你可能也知道,Python代碼按照模塊(module)劃分。一個模塊,可以是只有一個函數的單個文件,也可以是包含一個或多個子模塊的文件夾。包與模塊之間的區別非常小,每個模塊同時也可以視作一個包。

那么模塊與包之間,到底有什么區別?要想解答這個問題,你首先要了解Python是如何查找模塊的。

與其他編程環境類似,Python中也有一些函數和類(比如strlenException)是存在于全局作用域(global scope,在Python中被稱為builtin scope)的,其他的函數和類則需要通過import語句進行引用。例如:

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

這些包就在你的文件系統中的某處,所以能被import語句發現。那么Python是怎么知道這些模塊的地址?原來,在你安裝Python虛擬機的時候,就自動設置了這些地址。當然平臺不同,這些地址也就不一樣。

你可以通過sys.path查看系統中的包路徑。這是我的筆記本運行該命令之后的輸出結果,系統是Ubuntu 11.10 Oneric Ocelot。

>>> 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列表數據類型中。它會先從第一個路徑開始,一直往下檢索,直到找到匹配的路徑名。這意味著,如果兩個不同的文件夾中包含了兩個同名的包,那么包檢索將會返回其遇到的第一個絕對匹配地址,不會再繼續檢索下去。

你現在可能也猜到了,我們可以輕松地修改(hack)包檢索路徑,做到你指定的包第一個被發現。你只需要運行下面的代碼:

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

盡管這種做法在很多情況下十分有用,但是你必須牢記sys.path很容易被濫用。務必在必要時才使用這種方法,并且不要濫用。

site模塊控制著包檢索路徑設置的方法。每次Python虛擬機初始化時,就會被自動引用。如果你想更詳細地了解整個過程,可以查閱官方文檔。

PYTHONPATH環境變量

PYTHONPATH是一個可以用來增強默認包檢索路徑的環境變量。可以把它看作是一個PATH變量,但是一個只針對Python的變量。它只是一些包含有Python模塊的文件路徑列表(不是sys.path所返回的Python列表),每個路徑之間以:分隔。設置方法很簡單,如下:

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`和其他類似的方法,都是hack小技巧,一般情況下最好不要使用。如果它們能夠解決本地開發環境出現的問題,可以使用,但是你的生產環境中不應該依賴這些技巧。要取得同樣的效果,我們還可以找到更加優雅的方法,稍后我會詳細介紹。

現在你明白了Python如何查找已安裝的包,我們就可以回到一開始的那個問題了。Python中,模塊和包的區別到底是什么?包就是一個或多個模塊/子模塊的集合,一般都是以經過壓縮的tarball文件形式傳輸,這個文件中包含了:1. 依賴情況(如果有的話);2.將文件復制到標準的包檢索路徑的說明;3. 編譯說明——如果文件中包含了必須要經過編譯才能安裝的代碼。就是這點區別。

第三方包(Third Party packages)

如果想利用Python進行真正的編程工作,你從一開始就需要根據不同的任務安裝第三方包。

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

使用系統本身自帶的包管理器(deb, rpm等)

通過社區開發的類似pip, easy_install等多種工具

從源文件安裝

這三種方法做的幾乎是同一件事情,即安裝依賴包,視情況編譯代碼,然后把包中模塊復制到標準包檢索路徑。

盡管第二種和第三種方法在所有操作系統中的實現都一致,我還是要再次建議你查閱Stack Overflow網站的問答,找到你所使用系統中其他安裝第三方包的方法。

去哪找第三方包?

在安裝第三方包之前,你得先找到它們。查找包的方法有很多。

你使用的系統自帶的包管理器

Python包索引(也被稱為PyPI)

各種源碼托管服務,如Launchpad, Github, Bitbucket等。

通過系統自帶的包管理器安裝

使用系統自帶的包管理器安裝,只需要在命令行輸入相應命令,或是使用你用來安裝其他應用的GUI應用即可。舉個例子,要在Ubuntu系統上安裝simplejson(一個JSON解析工具),你可以輸入下面的命令:

$ sudo apt-get install python-simplejson
通過pip安裝

easy_install已經不太受開發者歡迎。本文將重點介紹easy_install的替代者——pip

pip是一個用來安裝和管理Python包的工具。它并不是一個Python虛擬機自帶的模塊,所以我們需要先安裝。在Linux系統中,我一般會這樣操作:

$ sudo apt-get install python-pip

在安裝其他包之前,我總是會把pip升級到PyPI中的最新版本,因為Ubuntu默認源中的版本比PyPI的低。我這樣升級pip

$ sudo pip install pip --upgrade

現在,你可以通過運行run pip install package-name,安裝任何Python包。所以,要安裝simplejson的話,你可以運行以下命令:

$ sudo pip install simplejson

移除包也一樣簡單。

$ sudo pip uninstall simplejson

pip默認會安裝PyPI上最新的穩定版,但是很多時候,你會希望安裝指定版本的包,因為你的項目依賴那個特定的版本。要想指定包的版本,你可以這樣做:

$ 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也可以滿足這個需求,但是在此之前,你需要在系統上安裝相應的版本控制系統(VCS)。在Ubuntu平臺,你可以輸入下面的命令:

$ sudo apt-get install git-core mercurial subversion

安裝好VCS之后,你可以通過下面的方式從遠程倉庫中安裝一個包:

$ 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

現在,你可能在納悶這些命令中的eggs是什么東西?目前你只需要知道,一個egg就是經zip壓縮之后的Python包,其中包含了包的源代碼和一些元數據。pip在安裝某個包之前,會構建相關的egg信息。你可以打開代碼倉庫中的setup.py文件,查看egg的名字(幾乎都會注明)。找到setup部分,然后看看有沒有一行類似name="something"的代碼。你找到的代碼可能會和下面這段代碼類似(來自simplejson包中的setup.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這個Python包的安裝路徑(/home/mir/.local/bin/markdown2

不在系統層面安裝所有的Python包有很多理由。稍后在介紹如何為每個項目設置多帶帶、孤立的Python環境時,我會具體說明。

從源文件安裝

從源文件安裝Python包,只需要一行命令。將包文件解壓,然后運行下面的命令:

cd /path/to/package/directory
python setup.py install

盡管這種安裝方法與其他的方法沒什么區別,但是要記住:pip永遠是安裝Python包的推薦方法,因為pip可以讓你輕松升級/降級,不需要額外手動下載、解壓和安裝。從源文件安裝時如果其他方法都行不通時,你的最后選擇(一般不會存在這種情況)。

安裝需要編譯的包

雖然我們已經介紹了大部分與包安裝相關的內容,仍有一點我們沒有涉及:含有C/C++代碼的Python包在安裝、使用之前,需要先編譯。最明顯的例子就是數據庫適配器(database adapters)、圖像處理庫等。

盡管pip可以管理源文件的編譯,我個人更喜歡通過系統自帶的包管理器安裝這類包。這樣安裝的就是預編譯好的二進制文件。

如果你仍想(或需要)通過pip安裝,在Ubuntu系統下你需要執行下面的操作。

安裝編譯器及相關工具:

$ sudo apt-get install build-essential

安裝Python開發文件(頭文件等):

$ sudo aptitude install python-dev-all

如果你的系統發行版本中沒有提供python-dev-all,請查找名字類似python-devpython2.X-dev的相關包。

假設你要安裝psycopg2(PostgreSQL數據庫的Python適配器),你需要安裝PostgreSQL的開發文件。

$ sudo aptitude install  postgresql-server-dev-all

滿足這些依賴條件之后 ,你就可以通過pip install安裝了。

$ sudo pip install psycopg2

這里應該記住一點:并非所有這類包都兼容pip安裝方式。但是,如果你自信可以成功編譯源文件,并且(或者)已經有目標平臺上的必要經驗和知識,那么你完全可以按照這種方式安裝。

開發環境

不同的人設置開發環境的方法也不同,但是在幾乎所有的編程社區中,肯定有一種方法(或者超過一種)比其他方法的接受度更高。盡管開發環境設置的與別人不同沒有問題,一般來說接受度更高的方法經受住了高強度的測試,并被證實可以簡化一些日常工作的重復性任務,并且可以提高可維護性。

virtualenv

Python社區中設置開發環境的最受歡迎的方法,是通過virtualenv。Virtualenv是一個用于創建孤立Python環境的工具。那么現在問題來了:為什么我們需要孤立的Python環境?要回答這個問題,請允許我引用virtualenv的官方文檔。

我們要解決的問題之一,就是依賴包和版本的管理問題,以及間接地解決權限問題。假設你有一個應用需要使用LibFoo V1,但是另一個應用需要V2。那么你如何使用兩個應用呢?如果你把需要的包都安裝在/usr/lib/python2.7/site-packages(或是你的系統默認路徑),很容易就出現你不小心更新了不應該更新的應用。

簡單來說,你的每一個項目都可以擁有一個多帶帶的、孤立的Python環境;你可以把所需的包安裝到各自孤立的環境中。

還是通過pip安裝virutalenv。

$ sudo pip install 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使用基于distribute包開發的新的、更好的打包系統,而不是基于setuptools的舊系統。你現在只需要知道,--distribute參數將會自動在虛擬環境中安裝pip,免去了手動安裝的麻煩。隨著你的Python編程經驗和知識增加,你會慢慢明白這個過程的具體細節。

現在查看my_project_venv文件夾中的內容,你會看到類似下面的文件夾結構:

# Showing only files/directories relevant to the discussion at hand
.
|-- bin
|   |-- activate  # <-- Activates this virtualenv
|   |-- pip       # <-- pip specific to this virtualenv
|   `-- python    # <-- A copy of python interpreter
`-- lib
    `-- python2.7 # <-- This is where all new packages will go

通過下面的命令,激活虛擬環境:

$ cd my_project_venv
$ source bin/activate

使用source命令啟動activate腳本之后,你的命令行提示符應該會變成這樣:

:::bash 
(my_project_venv)$ 

虛擬環境的名稱會添加在$提示符的前面。

現在運行下面的命令,關閉虛擬環境:

:::bash 
(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. 在你安裝第三方包時,它們被安裝在了當前激活的虛擬環境,而不是系統環境中;2. 當在代碼中引用第三方包時,當前激活的虛擬環境中的包將優先于系統環境中的包。

這里有很重要的一點要注意:系統Python環境中安裝的所有包,默認是可以在虛擬環境中調用的。這意味著,如果你在系統環境中安裝了simplejson包,那么所有的虛擬環境將自動獲得這個包的地址。你可以在創建虛擬環境時,通過添加--no-site-packages選項,取消這個行為,就像這樣:

$ virtualenv my_project_venv --no-site-packages
virtualenvwrapper

virtualenvwrappervirtualenv的封裝器(wrapper),提供了一些非常好的功能,便捷了創建、激活、管理和銷毀虛擬環境的操作,否則將會是件瑣事。你可以運行如下命令安裝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

這些配置中,唯一必須的是WORKON_HOMEsource /usr/local/bin/virtualenvwrapper.sh。其他的配置則是根據我的個人偏好進行的。

將上面的配置添加到~/.bashrc文件的最后,然后在你當前打開的終端界面中運行下面的命令:

$ source ~/.bashrc

關掉所有打開的終端窗口和Tab窗口,也能取得同樣地效果。當你再次打開終端窗口或Tab窗口時,~/.bashrc將會被執行,自動設置好你的virtualenvwrapper

現在如果想創建、激活、關閉或是刪除虛擬環境,你可以運行下面的代碼:

$ mkvirtualenv my_project_venv
$ workon my_project_venv
$ deactivate
$ rmvirtualenv my_project_venv

virtualenvwrapper還支持tab自動補全功能。

你可以前往virtualenvwrapper項目主頁查看更多命令和配置選項。

通過pip和virtualenv進行基本的依賴包管理

pipvirtualenv結合使用,可以為項目提供基本的依賴包管理功能。

你可以使用pip freeze導出目前安裝的包列表。例如,下面就是我用來開發這個博客網站所用的Python包:

$ pip freeze -l 
Jinja2==2.6
PyYAML==3.10
Pygments==1.4
distribute==0.6.19
markdown2==1.0.1.19

注意,我使用了-l選項。它告訴pip只導出當前激活的虛擬環境中安裝的包,忽略全局安裝的包。

你可以將導出的列表保存至文件,并把文件添加到版本控制系統(VCS)。

$ pip freeze -l  > requirements.txt

通過pip,我們可以從寫入了pip freeze命令結果的文件中,安裝相應的包。

其他重要工具

前面我們介紹了有關Python版本、虛擬機和包管理的基礎知識,但是日常工作中還有其他任務需要使用專門的工具來完成。雖然我無法詳細介紹每一個工具,我會盡量做一個大概的介紹。

提前說聲對不起,因為下面介紹的大部分工具都是與網絡應用開發相關的。

編輯器

提供在Python中進行編程的優秀編輯器有很多。我個人傾向于Vim,但是我不想引發一場編輯器優劣大戰

對Python編程支持較好地編輯器和集成開發環境(IDEs),主要有Vim/GVim, Emacs, GNOME主題下的GEdit, Komodo Edit, Wing IDE, PyCharm等。還有其他編輯器,但是上面列舉的這些應該是最受歡迎的。你應該選擇最適合自己的工具。

Pyflakes:源碼檢查

Pyflakes是一個簡單的程序,通過分析文件的文本內容,檢查Python源文件中的錯誤。它可以檢查語法和部分邏輯錯誤,識別被引用但沒有使用的模塊,以及只使用了一次的變量,等等。

你可以通過pip安裝:

$ pip install pyflakes

然后像下面那樣,在命令行調用pyflakes,傳入Python源文件作為參數:

$ pyflakes filename.py

Pyflakes還可以嵌入到你的編輯器中。下面這張圖顯示的是嵌入了Vim之后的情況。注意出現了紅色的波浪線。

你可以在Stack Overflow上咨詢如何在你使用的編輯器重添加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:網絡開發微框架

Flask是一個基于Werkzeug與Jinja2這兩個庫的Python微框架。

首先通過pip安裝:

$ pip install Flask

下面是一個簡單的使用示例:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

這樣運行Flask應用:

$ python hello.py

Running on http://localhost:5000/

Flask官網

Django:面向網絡開發的全棧框架

Django是一個全棧網絡框架。它提供了ORM、HTTP庫、表格處理、XSS過濾、模板引擎以及其他功能。

這樣通過pip安裝:

$ pip install Django

前往Django官網,跟著教程學習即可。非常簡單。

Fabric:簡化使用SSH部署網站和執行系統管理任務的方式

Fabric是一個命令行工具,可以簡化使用SSH進行網站部署或執行系統管理任務的過程。

它提供了一套基本的操作,可以執行本地或遠程命令行命令,上傳/下載文件,以及提示用戶進行輸入或者取消執行等輔助性功能。

你可以通過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:Python中的科學計算工具

如果你的工作涉及科學計算或數學計算,那么SciPy就是必不可少的工具。

SciPy (pronounced "Sigh Pie") 是一個開源的數學、科學和工程計算包。SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。與其功能相類似的軟件還有MATLAB、GNU Octave和Scilab。SciPy目前在BSD許可證下發布。它的開發由Enthought資助

前往SciPy官網,獲取詳細的下載/安裝說明以及文檔。

PEP 8:Python風格指南

雖然PEP 8本身不是一個工具,但毋庸置疑的是,它是Python開發方面一個非常重要的文件。

PEP 8這個文件中,定義了主流Python發行版本中標準庫的編碼規范。文件的唯一目的,就是確保其他的Python代碼都能遵守同樣地代碼結構以及變量、類和函數命名規律。確保你充分了解并遵循該風格指南。

PEP 8鏈接

強大的Python標準庫

Python的標準庫內容非常豐富,提供了大量的功能。標準庫中包含了眾多內建模塊(built-in modules,用C語言編寫的),可以訪問類似文件讀/寫(I/O)這樣的系統功能,還包括了用Python編寫的模塊,提供了日常編程中許多問題的標準解決方案。其中一些模塊的設計思路很明顯,就是要鼓勵和增強Python程序的可移植性,因此將平臺相關的細節抽象為了不依賴于平臺的API接口。

查看標準庫的官方文檔。

推薦閱讀

David Goodger的《如何像Python高手一樣編程》一文,深入介紹了許多Python的慣用法和技巧,可以立刻為你增添許多有用的工具。

Doug Hellmann的系列文章Python Module of the Week。這個系列的焦點,是為Python標準庫中模塊編寫示例代碼。

結語

我在本文中所介紹的內容,觸及的還只是Python生態系統的表面。Python世界中,幾乎針對每一個你能想象到的任務,都存在相關的工具、庫和軟件。這些明顯無法在一篇文章中盡述。你必須要自己慢慢探索。

Python有偉大的社區,社區中的人很聰明,也很有耐心,樂于幫助Python語言的初學者。所以,你可以選擇一個最喜歡的開源項目,去它的IRC頻道找人聊天;關注郵件列表,并積極提問;和有豐富Python系統實施經驗的人交談。慢慢地,隨著你的經驗和知識逐步積累,你也會成為他們之中的一員。

最后,我為大家推薦Python之禪。反復回味、思考這幾段話,你一定會有所啟發!

>>> 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!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44200.html

相關文章

  • SegmentFault 技術周刊 Vol.40 - 2018,來學習門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習門新的編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評論0 收藏0
  • Python多版本切換工具-Pyenvvirtualenv及Anaconda科學計算環境的配置

    摘要:為了安裝科學計算環境,控制好版本,今天上午總算折騰好了。切換和使用新的虛擬環境這樣就能切換為這個版本的虛擬環境。通過輸入查看現在版本,可以發現處于虛擬環境下了。指定包的版本多個版本并存,尤其是和的并存。下面用創建一個名叫的版本為的環境。 為了安裝Anaconda科學計算環境,控制好python版本,今天上午總算折騰好了。 學習python有時希望在python2.7環境下,有時希望在...

    rozbo 評論0 收藏0

發表評論

0條評論

dadong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<