鍍金池/ 教程/ Python/ exercise46.項目骨架
附錄 A-練習(xí) 9:生成一個空文件(Touch, New-Item)
附錄 A-練習(xí) 10:復(fù)制文件 (cp)
exercise44.繼承 Vs.包含
附錄 A-練習(xí) 14:刪除文件 (rm)
附錄 A-練習(xí) 11:移動文件 (mv)
exercise46.項目骨架
附錄 A-練習(xí) 3:如果你迷路了
exercise37.復(fù)習(xí)符號
exercise47.自動化測試
exercise3.數(shù)字和數(shù)學(xué)計算
附錄 A-練習(xí) 1:安裝
exercise32.循環(huán)和列表
exercise31.做出決定
exercise42.對象、類、以及從屬關(guān)系
exercise48.更復(fù)雜的用戶輸入
下一步
簡介
附錄 A-練習(xí) 7:刪除路徑 (rmdir)
exercise49.寫代碼語句
exercise18.命名, 變量, 代碼, 函數(shù)
exercise12.提示別人
exercise14.提示和傳遞
exercise40.模塊, 類和對象
附錄 A-練習(xí) 12:查看文件 (less, MORE)
exercise9.打印, 打印, 打印
exercise13.參數(shù), 解包, 變量
exercise30. Else 和 If
exercise28. 布爾表達(dá)式
附錄 A-練習(xí) 4:創(chuàng)建一個路徑 (mkdir)
附錄 A-練習(xí) 15:退出命令行 (exit)
exercise25. 更多更多的練習(xí)
exercise6.字符串和文本
exercise2.注釋和井號“#”
exercise21. 函數(shù)的返回值
附錄 A-下一步
exercise1.第一個程序
exercise23. 閱讀代碼
附錄 A-練習(xí) 5:改變當(dāng)前路徑 (cd)
exercise17.更多文件操作
exercise24. 更多的練習(xí)
exercise19.函數(shù)和變量
exercise51.從瀏覽器獲取輸入
exercise22. 到目前為止你學(xué)到了什么?
exercise41.學(xué)會說面向?qū)ο?/span>
exercise52.開始你的 web 游戲
exercise20. 函數(shù)和文件
exercise15.讀文件
exercise45.你來制作一個游戲
exercise10.那是什么?
exercise8.打印, 打印
exercise35.分支和函數(shù)
exercise26. 恭喜你,可以進(jìn)行一次考試了
exercise33.while 循環(huán)
exercise29. IF 語句
exercise36.設(shè)計和調(diào)試
exercise0.安裝和準(zhǔn)備
exercise50.你的第一個網(wǎng)站
附錄 A-練習(xí) 2:路徑, 文件夾, 名錄 (pwd)
exercise38.列表操作
附錄 A-練習(xí) 6:列出當(dāng)前路徑 (ls)
exercise16.讀寫文件
exercise4.變量和命名
exercise34.訪問列表元素
exercise11.提問
exercise43.基本的面向?qū)ο蟮姆治龊驮O(shè)計
附錄 A-簡介
附錄 A-練習(xí) 8:目錄切換(pushd, popd)
來自老程序員的建議
exercise27. 記住邏輯
exercise5.更多的變量和打印
exercise7.更多的打?。ㄝ敵觯?/span>
附錄 A-練習(xí) 13:輸出文件 (cat)
exercise39.字典,可愛的字典

exercise46.項目骨架

這里你將學(xué)會如何建立一個項目“骨架”目錄。這個骨架目錄具備讓項目跑起來的所有基本內(nèi)容。它里邊會包含你的項目文件布局、自動化測試代碼,模組,以及安裝腳本。當(dāng)你建立一個新項目的時候,只要把這個目錄復(fù)制過去,改改目錄的名字,再編輯里邊的文件就行了。

安裝 Python 軟件包的

你需要使用 pip 預(yù)先安裝一些軟件包,不過問題就來了。我的本意是讓這本書越清晰越干凈越好,不過安裝軟件的方法是在是太多了,如果我要一步一步寫下來,那 10 頁都寫不完,而且告訴你吧,我本來就是個懶人。

所以我不會提供詳細(xì)的安裝步驟了,我只會告訴你需要安裝哪些東西,然后讓你自己搞定。即使我給了你所需軟件詳盡的安裝說明,你還是不得不與之奮斗。計算機(jī)更新?lián)Q代非常頻繁,你在安裝過程中遇到問題的時候,可以在網(wǎng)上搜索解決方案。

你需要安裝下面的軟件包:

1.pip – http://pypi.python.org/pypi/pip 2.distribute – http://pypi.python.org/pypi/distribute 3.nose – http://pypi.python.org/pypi/nose/ 4.virtualenv – http://pypi.python.org/pypi/virtualenv

不要只是手動下載并且安裝這些軟件包,你應(yīng)該看一下別人的建議,尤其看看針對你的操作系統(tǒng)別人是怎樣建議你安裝和使用的。同樣的軟件包在不一樣的操作系統(tǒng)上面的安裝方式是不一樣的,不一樣版本的 Linux 和 OSX 會有不同,而 Windows 更是不同。

我要預(yù)先警告你,這個過程會是相當(dāng)無趣。在業(yè)內(nèi)我們將這種事情叫做 “yak shaving(剃牦牛)”。它指的是在你做一件有意義的事情之前的一些準(zhǔn)備工作,而這些準(zhǔn)備工作又是及其無聊冗繁的。你要做一個很酷的 Python 項目,但是創(chuàng)建骨架目錄需要你安裝一些軟件包,而安裝軟件包之前你還要安裝軟件包安裝工具(package installer),而要安裝這個工具你還得先學(xué)會如何在你的操作系統(tǒng)下安裝軟件,真是煩不勝煩呀。

無論如何,還是克服困難把。你就把它當(dāng)做進(jìn)入編程俱樂部的一個考驗。每個程序員都會經(jīng)歷這條道路,在每一段“酷”的背后總會有一段“煩”的。

NOTE: 有時候 python 的安裝程序不會把 C:\Python27\Script 加入到系統(tǒng)的 PATH 中,如果你遇到了這個問題,就參照練習(xí) 0 自己把這個目錄加上:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\Scripts", "User")

創(chuàng)建骨架內(nèi)容

首先使用下述命令創(chuàng)建你的骨架目錄:

$ mkdir projects
$ cd projects/
$ mkdir skeleton
$ cd skeleton
$ mkdir bin NAME tests docs

我使用了一個叫 projects 的目錄,用來存放我自己的各個項目。然后我在里邊建立了一個叫做 skeleton 的文件夾,這就是我們新項目的基礎(chǔ)目錄。其中叫做 NAME 的文件夾是你的項目的主文件夾,你可以將它任意取名。

接下來我們要配置一些初始文件:

$ touch NAME/__init__.py
$ touch tests/__init__.py

在 windows 上,你可以這樣配置初始文件:

$ new-item -type file NAME/__init__.py
$ new-item -type file tests/__init__.py

以上命令為你創(chuàng)建了空的模組目錄,以供你后面為其添加代碼。然后我們需要建立一個 setup.py 文件,這個文件在安裝項目的時候我們會用到它:

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)

編輯這個文件,把自己的聯(lián)系方式寫進(jìn)去,然后放到那里就行了。

最后你需要一個簡單的測試專用的骨架文件叫 tests/NAME_tests.py:

from nose.tools import *
import NAME

def setup():
    print "SETUP!"

def teardown():
    print "TEAR DOWN!"

def test_basic():
    print "I RAN!"

最終的目錄結(jié)構(gòu)

當(dāng)你完成一切設(shè)置,你的目錄應(yīng)該看起來像我在這里:

skeleton/
     NAME/
         __init__.py
     bin/
     docs/
     setup.py
     tests/
         NAME_tests.py
         __init__.py

從現(xiàn)在開始,你應(yīng)該在這個目錄下運行命令。如果你不能執(zhí)行 ls -R 命令并看到相似的目錄結(jié)構(gòu),說明你在一個錯誤的目錄下。比如,人們經(jīng)常會到 tests/目錄下嘗試執(zhí)行文件,那肯定是無法運行的。要運行你應(yīng)用的測試用例,你也應(yīng)該在目錄 tests/的上一層目錄執(zhí)行,加入你這樣執(zhí)行:

$ cd tests/   # WRONG! WRONG! WRONG!
$ nosetests

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

那結(jié)果肯定是錯誤的,你應(yīng)當(dāng)在 tests/目錄的上一層目錄執(zhí)行,所以為了修正你的錯誤,你應(yīng)該這樣做:

$ cd ..   # get out of tests/
$ ls      # CORRECT! you are now in the right spot
NAME                bin             docs            setup.py        tests
$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.004s

OK

一定要記住這一點,因為人們經(jīng)常犯這個錯誤。

測試你的配置

安裝了所有上面的軟件包以后,你就可以做下面的事情了:

$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.007s

OK

下一節(jié)練習(xí)中我會告訴你 nosetests 的功能,不過如果你沒有看到上面的畫面,那就說明你哪里出錯了。確認(rèn)一下你的 NAME 和 tests 目錄下存在 init.py, 并且你沒有把 tests/NAME_tests.py 命名錯。

使用這個項目骨架

剃牦牛的事情已經(jīng)做的差不多了,以后每次你要新建一個項目時,只要做下面的事情就可以了:

1.拷貝這份骨架目錄,把名字改成你新項目的名字。 2.再將 NAME 模組更名為你需要的名字,它可以是你項目的名字,當(dāng)然別的名字也行。 3.編輯 setup.py 讓它包含你新項目的相關(guān)信息。 4.重命名 tests/NAME_tests.py,讓它的名字匹配到你模組的名字。 5.使用 nosetests 檢查有無錯誤。 6.開始寫代碼吧。

小測驗

本節(jié)沒有附加題,不過有一些小測驗需要你完成

1.找文檔閱讀,學(xué)會使用你前面安裝了的軟件包。 2.閱讀關(guān)于 setup.py 的文檔,看它里邊可以做多少配置。Python 的安裝器并不是一個好軟件,所以使用起來也非常奇怪。 3.創(chuàng)建一個項目,在模組目錄里寫一些代碼,并讓這個模組可以運行。 4.在 bin 目錄下放一個可以運行的腳本,找材料學(xué)習(xí)一下怎樣創(chuàng)建可以在系統(tǒng)下運行的 Python 腳本。 5.在你的 setup.py 中加入 bin 這個目錄,這樣你安裝時就可以連它安裝進(jìn)去。 6.使用 setup.py 安裝你的模組,并確定安裝的模組可以正常使用,最后使用 pip 將其卸載。

常見問題

Q: 這些說明在 windows 上也是一樣的嗎?

是的,不過也取決于你 windows 系統(tǒng)的版本,你可能需要在配置上下點功夫它才能正常運行,堅持研究并嘗試,直到你能在 windows 上正常的運行這個骨架,或者你可以找一些有 python+windows 開發(fā)經(jīng)驗的人幫忙。

Q: 我好像不能在 windows 上運行 nosetests

有時候 python 的安裝程序不會把 C:\Python27\Script 加入到系統(tǒng)的 PATH 中,如果你遇到了這個問題,就參照練習(xí) 0 自己把這個目錄加上:[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\Scripts", "User")

Q: 我應(yīng)該在我的配置文件 setup.py 中放些什么?

確認(rèn)你閱讀了 distutils 的文檔 http://docs.python.org/distutils/setupscript.html

Q:我好像不能加載 NAME 模塊,而且還有個"ImportError"報錯

確認(rèn)你創(chuàng)建了 NAME/init.py 這個文件,如果你用的 windows 系統(tǒng),確認(rèn)你沒有把這文件命名為 NAME/init.py.txt,很多程序員都犯過這個錯。

Q: 我們?yōu)槭裁葱枰粋€ bin/文件夾

這只是一個用來存放在命令行執(zhí)行的腳本的地方,不是用來存在模塊的。

Q: 你有一個真實的項目舉例嗎?

有很多 python 寫的項目都可以作為實例,你可以看看我創(chuàng)建的這個簡單的項目 https://gitorious.org/python-modargs.

Q: 我的 nosetests 運行時只顯示正在運行一個測試,這是正確的嗎?

是的,我的也是這么顯示的。