這里你將學(xué)會(huì)如何建立一個(gè)項(xiàng)目“骨架”目錄。這個(gè)骨架目錄具備讓項(xiàng)目跑起來(lái)的所有基本內(nèi)容。它里邊會(huì)包含你的項(xiàng)目文件布局、自動(dòng)化測(cè)試代碼,模組,以及安裝腳本。當(dāng)你建立一個(gè)新項(xiàng)目的時(shí)候,只要把這個(gè)目錄復(fù)制過(guò)去,改改目錄的名字,再編輯里邊的文件就行了。
首先使用下述命令創(chuàng)建你的骨架目錄:
~ $ mkdir -p projects
~ $ cd projects/
~/projects $ mkdir skeleton
~/projects $ cd skeleton
~/projects/skeleton $ mkdir bin NAME tests docs
我使用了一個(gè)叫 projects 的目錄,用來(lái)存放我自己的各個(gè)項(xiàng)目。然后我在里邊建立了一個(gè)叫做 skeleton 的文件夾,這就是我們新項(xiàng)目的基礎(chǔ)目錄。其中叫做NAME 的文件夾是你的項(xiàng)目的主文件夾,你可以將它任意取名。
接下來(lái)我們要配置一些初始文件:
~/projects/skeleton $ touch NAME/__init__.py
~/projects/skeleton $ touch tests/__init__.py
以上命令為你創(chuàng)建了空的模組目錄,以供你后面為其添加代碼。然后我們需要建立一個(gè) setup.py 文件,這個(gè)文件在安裝項(xiàng)目的時(shí)候我們會(huì)用到它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | try:
from setuptools import setup
except ImportError:
from distutils.core import setup
config = {
'description': 'My Project',
'author': 'My Name',
'url': 'URL to get it at.',
'download_url': 'Where to download it.',
'author_email': 'My email.',
'version': '0.1',
'install_requires': ['nose'],
'packages': ['NAME'],
'scripts': [],
'name': 'projectname'
}
setup(**config)
|
編輯這個(gè)文件,把自己的聯(lián)系方式寫進(jìn)去,然后放到那里就行了。
最后你需要一個(gè)簡(jiǎn)單的測(cè)試專用的骨架文件叫 tests/NAME_tests.py:
1 2 3 4 5 6 7 8 9 10 11 | from nose.tools import *
import NAME
def setup():
print "SETUP!"
def teardown():
print "TEAR DOWN!"
def test_basic():
print "I RAN!"
|
當(dāng)你完成了一切準(zhǔn)備工作,你的目錄看上去應(yīng)該和我這里的一樣:
$ ls -R
NAME bin docs setup.py tests
./NAME:
__init__.py
./bin:
./docs:
./tests:
NAME_tests.py __init__.py
這是 unix 下看到的東西,不過(guò) Windows 下也是一樣的,如果以樹狀結(jié)構(gòu)顯示就是這個(gè)樣子:
setup.py
NAME/
__init__.py
bin/
docs/
tests/
NAME_tests.py
__init__.py
從現(xiàn)在開始,你應(yīng)該在這層目錄運(yùn)行命令。如果你運(yùn)行 ls -R 看到的不是這個(gè)目錄架構(gòu),那你所處的目錄就是錯(cuò)的。例如人們經(jīng)常到 tests/ 目錄下運(yùn)行那里的文件,但這樣是行不通的。要運(yùn)行你的 測(cè)試,你需要到 tests/ 的上一級(jí)目錄,也就是我這里顯示的目錄來(lái)運(yùn)行。所以,如果你運(yùn)行下面的命令:
$ cd tests/ # WRONG! WRONG! WRONG!
$ nosetests
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
這樣做大錯(cuò)特錯(cuò)!你必須在 tests 目錄的上一層運(yùn)行才可以,所以假設(shè)你犯了這個(gè)錯(cuò)誤,你應(yīng)該用下面的方法來(lái)正確執(zhí)行:
$ cd .. # 離開 tests/ 目錄
$ ls # CORRECT! 現(xiàn)在你所處的目錄是正確的
NAME bin docs setup.py tests
$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.004s
OK
記住這一條,因?yàn)槿藗兘?jīng)常犯這樣的錯(cuò)誤。
你需要預(yù)先安裝一些軟件包,不過(guò)問題就來(lái)了。我的本意是讓這本書越清晰越干凈越好,不過(guò)安裝軟件的方法是在是太多了,如果我要一步一步寫下來(lái),那 10 頁(yè)都寫不完,而且告訴你吧,我本來(lái)就是個(gè)懶人。
所以我不會(huì)提供詳細(xì)的安裝步驟了,我只會(huì)告訴你需要安裝哪些東西,然后讓你自己搞定。這對(duì)你也有好處,因?yàn)槟銓⒋蜷_一個(gè)全新的世界,里邊充滿了其他人發(fā)布的 Python 軟件。
接下來(lái)你需要安裝下面的軟件包:
不要只是手動(dòng)下載并且安裝這些軟件包,你應(yīng)該看一下別人的建議,尤其看看針對(duì)你的操作系統(tǒng)別人是怎樣建議你安裝和使用的。同樣的軟件包在不一樣的操作系統(tǒng)上面的安裝方式是不一樣的,不一樣版本的 Linux 和 OSX 會(huì)有不同,而 Windows 更是不同。
我要預(yù)先警告你,這個(gè)過(guò)程會(huì)是相當(dāng)無(wú)趣。在業(yè)內(nèi)我們將這種事情叫做 “yak shaving(剃牦牛)”。它指的是在你做一件有意義的事情之前的一些準(zhǔn)備工作,而這些準(zhǔn)備工作又是及其無(wú)聊冗繁的。你要做一個(gè)很酷的 Python 項(xiàng)目,但是創(chuàng)建骨架目錄需要你安裝一些軟件包,而安裝軟件包之前你還要安裝 package installer (軟件包安裝工具),而要安裝這個(gè)工具你還得先學(xué)會(huì)如何在你的操作系統(tǒng)下安裝軟件,真是煩不勝煩呀。
無(wú)論如何,還是克服困難把。你就把它當(dāng)做進(jìn)入編程俱樂部的一個(gè)考驗(yàn)。每個(gè)程序員都會(huì)經(jīng)歷這條道路,在每一段“酷”的背后總會(huì)有一段“煩”的。
安裝了所有上面的軟件包以后,你就可以做下面的事情了:
~/projects/skeleton $ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.007s
OK
下一節(jié)練習(xí)中我會(huì)告訴你 nosetests 的功能,不過(guò)如果你沒有看到上面的畫面,那就說(shuō)明你哪里出錯(cuò)了。確認(rèn)一下你的 NAME 和 tests 目錄下存在 __init__.py, 并且你沒有把 tests/NAME_tests.py 命名錯(cuò)。
剃牦牛的事情已經(jīng)做的差不多了,以后每次你要新建一個(gè)項(xiàng)目時(shí),只要做下面的事情就可以了:
這節(jié)練習(xí)沒有加分習(xí)題,不過(guò)需要你做一個(gè)小測(cè)驗(yàn):