<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 練習46.項目骨架 這里你將學會如何建立一個項目“骨架”目錄。這個骨架目錄具備讓項目跑起來的所有基本內容。它里邊會包含你的項目文件布局、自動化測試代碼,模組,以及安裝腳本。當你建立一個新項目的時候,只要把這個目錄復制過去,改改目錄的名字,再編輯里邊的文件就行了。 ## 安裝Python 軟件包的 你需要使用pip預先安裝一些軟件包,不過問題就來了。我的本意是讓這本書越清晰越干凈越好,不過安裝軟件的方法是在是太多了,如果我要一步一步寫下來,那 10 頁都寫不完,而且告訴你吧,我本來就是個懶人。 所以我不會提供詳細的安裝步驟了,我只會告訴你需要安裝哪些東西,然后讓你自己搞定。即使我給了你所需軟件詳盡的安裝說明,你還是不得不與之奮斗。計算機更新換代非常頻繁,你在安裝過程中遇到問題的時候,可以在網上搜索解決方案。 你需要安裝下面的軟件包: > 1. pip – [http://pypi.python.org/pypi/pip](http://pypi.python.org/pypi/pip) > 1. distribute – [http://pypi.python.org/pypi/distribute](http://pypi.python.org/pypi/distribute) > 1. nose – [http://pypi.python.org/pypi/nose/](http://pypi.python.org/pypi/nose/) > 1. virtualenv – [http://pypi.python.org/pypi/virtualenv](http://pypi.python.org/pypi/virtualenv) 不要只是手動下載并且安裝這些軟件包,你應該看一下別人的建議,尤其看看針對你的操作系統別人是怎樣建議你安裝和使用的。同樣的軟件包在不一樣的操作系統上面的安裝方式是不一樣的,不一樣版本的 Linux 和 OSX 會有不同,而 Windows 更是不同。 我要預先警告你,這個過程會是相當無趣。在業內我們將這種事情叫做 “yak shaving(剃牦牛)”。它指的是在你做一件有意義的事情之前的一些準備工作,而這些準備工作又是及其無聊冗繁的。你要做一個很酷的 Python 項目,但是創建骨架目錄需要你安裝一些軟件包,而安裝軟件包之前你還要安裝軟件包安裝工具(package installer),而要安裝這個工具你還得先學會如何在你的操作系統下安裝軟件,真是煩不勝煩呀。 無論如何,還是克服困難把。你就把它當做進入編程俱樂部的一個考驗。每個程序員都會經歷這條道路,在每一段“酷”的背后總會有一段“煩”的。 > **NOTE:**有時候python的安裝程序不會把`C:\Python27\Script`加入到系統的`PATH`中,如果你遇到了這個問題,就參照練習0自己把這個目錄加上:`[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\Scripts", "User")` ## 創建骨架內容 首先使用下述命令創建你的骨架目錄: ~~~ $ mkdir projects $ cd projects/ $ mkdir skeleton $ cd skeleton $ mkdir bin NAME tests docs ~~~ 我使用了一個叫`projects`的目錄,用來存放我自己的各個項目。然后我在里邊建立了一個叫做`skeleton`的文件夾,這就是我們新項目的基礎目錄。其中叫做`NAME`的文件夾是你的項目的主文件夾,你可以將它任意取名。 接下來我們要配置一些初始文件: ~~~ $ touch NAME/__init__.py $ touch tests/__init__.py ~~~ 在windows上,你可以這樣配置初始文件: ~~~ $ new-item -type file NAME/__init__.py $ new-item -type file tests/__init__.py ~~~ 以上命令為你創建了空的模組目錄,以供你后面為其添加代碼。然后我們需要建立一個`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) ~~~ 編輯這個文件,把自己的聯系方式寫進去,然后放到那里就行了。 最后你需要一個簡單的測試專用的骨架文件叫`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!" ~~~ ## 最終的目錄結構 當你完成一切設置,你的目錄應該看起來像我在這里: ~~~ skeleton/ NAME/ __init__.py bin/ docs/ setup.py tests/ NAME_tests.py __init__.py ~~~ 從現在開始,你應該在這個目錄下運行命令。如果你不能執行`ls -R`命令并看到相似的目錄結構,說明你在一個錯誤的目錄下。比如,人們經常會到`tests/`目錄下嘗試執行文件,那肯定是無法運行的。要運行你應用的測試用例,你也應該在目錄`tests/`的上一層目錄執行,加入你這樣執行: ~~~ $ cd tests/ # WRONG! WRONG! WRONG! $ nosetests ---------------------------------------------------------------------- Ran 0 tests in 0.000s OK ~~~ 那結果肯定是錯誤的,你應當在`tests/`目錄的上一層目錄執行,所以為了修正你的錯誤,你應該這樣做: ~~~ $ 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 ~~~ 一定要記住這一點,因為人們經常犯這個錯誤。 ## 測試你的配置 安裝了所有上面的軟件包以后,你就可以做下面的事情了: ~~~ $ nosetests . ---------------------------------------------------------------------- Ran 1 test in 0.007s OK ~~~ 下一節練習中我會告訴你`nosetests`的功能,不過如果你沒有看到上面的畫面,那就說明你哪里出錯了。確認一下你的`NAME`和`tests`目錄下存在 `__init__.py`, 并且你沒有把 `tests/NAME_tests.py` 命名錯。 ## 使用這個項目骨架 剃牦牛的事情已經做的差不多了,以后每次你要新建一個項目時,只要做下面的事情就可以了: > 1. 拷貝這份骨架目錄,把名字改成你新項目的名字。 > 1. 再將`NAME`模組更名為你需要的名字,它可以是你項目的名字,當然別的名字也行。 > 1. 編輯`setup.py`讓它包含你新項目的相關信息。 > 1. 重命名`tests/NAME_tests.py`,讓它的名字匹配到你模組的名字。 > 1. 使用`nosetests`檢查有無錯誤。 > 1. 開始寫代碼吧。 ## 小測驗 本節沒有附加題,不過有一些小測驗需要你完成 > 1. 找文檔閱讀,學會使用你前面安裝了的軟件包。 > 1. 閱讀關于`setup.py`的文檔,看它里邊可以做多少配置。Python 的安裝器并不是一個好軟件,所以使用起來也非常奇怪。 > 1. 創建一個項目,在模組目錄里寫一些代碼,并讓這個模組可以運行。 > 1. 在 `bin` 目錄下放一個可以運行的腳本,找材料學習一下怎樣創建可以在系統下運行的 Python 腳本。 > 1. 在你的 `setup.py`中加入`bin`這個目錄,這樣你安裝時就可以連它安裝進去。 > 1. 使用`setup.py`安裝你的模組,并確定安裝的模組可以正常使用,最后使用`pip`將其卸載。 ## 常見問題 ### Q: 這些說明在windows上也是一樣的嗎? > 是的,不過也取決于你windows系統的版本,你可能需要在配置上下點功夫它才能正常運行,堅持研究并嘗試,直到你能在windows上正常的運行這個骨架,或者你可以找一些有python+windows開發經驗的人幫忙。 ### Q: 我好像不能在windows上運行`nosetests` > 有時候python的安裝程序不會把`C:\Python27\Script`加入到系統的`PATH`中,如果你遇到了這個問題,就參照練習0自己把這個目錄加上:`[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\Scripts", "User")` ### Q: 我應該在我的配置文件`setup.py`中放些什么? > 確認你閱讀了distutils的文檔`http://docs.python.org/distutils/setupscript.html`。 ### Q:我好像不能加載`NAME`模塊,而且還有個"ImportError"報錯 > 確認你創建了`NAME/__init__.py`這個文件,如果你用的windows系統,確認你沒有把這文件命名為`NAME/__init__.py.txt`,很多程序員都犯過這個錯。 ### Q: 我們為什么需要一個`bin/`文件夾 > 這只是一個用來存放在命令行執行的腳本的地方,不是用來存在模塊的。 ### Q: 你有一個真實的項目舉例嗎? > 有很多python寫的項目都可以作為實例,你可以看看我創建的這個簡單的項目`https://gitorious.org/python-modargs`. ### Q: 我的`nosetests`運行時只顯示正在運行一個測試,這是正確的嗎? > 是的,我的也是這么顯示的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看