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

                你是否有過這樣的經歷,收到一件不錯的生日禮物或圣誕禮物,但是打開后卻發現送你的人忘了買電池?Python的“內置電池”哲學讓作為程序員的你不會遇到這類問題,只要安裝了Python,就擁有了完成任何功能所需的一切條件。 然而,Python標準庫的開發者并不能預測你要實現的“任何”功能到底是什么。即使可以,大多數人也不想去處理一個幾個GB的文件下載,即使可能只是需要寫一個重命名文件的腳本。關鍵在于,即使擁有所有的擴展功能,仍然有許多功能是Python標準庫沒有涵蓋的。不過,這并不是說有些事情是根本無法用Python實現的,這只是表明有些事情可能需要使用外部庫。 Python標準庫是安全且范圍明確的:模塊文檔化程度很高,并且有足夠多的人在經常使用它,從而可以保證在你想使用它時肯定不會遇到麻煩。而且,就算萬一出了問題,也能確保在短時間內有人解決。但是,外部庫就像是地圖上標著“熊出沒,請注意”的部分:可能缺少文檔,功能有bug,更新較少或根本不更新。任何正式的項目都可能用到一些只有外部庫提供的功能,但是需要謹記使用這些外部庫可能帶來的風險。 下面是來自一線的案例。OpenStack使用了SQLAlchemy(<http://www.sqlalchemy.org/>)——一個Python數據庫開發工具包。如果了解SQL的話會知道,數據庫的結構是會發生變化的,所以OpenStack還使用了sqlalchemy-migrate(<https://code.google.com/p/sqlalchemy-migrate/>)來處理數據庫模式的升級。一切運行良好,直到有一天它們不行了,開始出現大量bug,并且沒有好轉的跡象。而且,OpenStack在當時是想要支持Python 3的,然而沒有任何跡象表明sqlalchemy-migrate要支持Python 3。因此,顯然sqlalchemy-migrate已經死了,我們需要切換到其他替代方案。截止到作者寫作時,OpenStack正準備升級到Alembic([https://pypi. python.org/pypi/alembic](https://pypi.python.org/pypi/alembic)),雖然也有一些工作要做,但好在不是那么痛苦。 所有這些引出一個重要的問題:“如何保證我不會掉進同樣的陷阱里?”很遺憾,沒辦法保證。程序員也是人,沒什么辦法可以確保目前維護良好的庫在幾個月后仍然維護良好。但是,在OpenStack中我們使用下列檢查表來根據需要給出建議(我建議你也這么做)。 - Python 3兼容。盡管現在你可能并不準備支持Python 3,但很可能早晚會涉及,所以確認選擇的庫是Python 3兼容的并且承諾保持兼容是明智的。 - 開發活躍。GitHub(<http://github.com>)和Ohloh(<http://www.ohloh.net/>)通常提供足夠的信息來判斷一個庫是否有維護者仍然在工作。 - 維護活躍。盡管一個庫可能是“完成”狀態(即功能完備,不會再加入新功能),但應該有維護者仍然在工作,以確保沒有bug。可以通過查看項目的跟蹤系統來看維護者對bug的反應是否迅速。 - 與各個操作系統發行版打包在一起。如果一個庫被打包在主流的Linux發行版內,說明有其他項目依賴它,所以,如果真有什么問題,至少你不是唯一一個抱怨的。如果打算公開發布你的軟件,那么這項檢查也是很有用的。因為如果軟件的依賴已經在終端用戶的機器上安裝了,顯然分發你的軟件會更容易。 - API兼容保證。沒有比你的軟件因為一個它依賴的庫發生了變化而使整個API崩潰更糟的了。你一定很想知道選擇的庫在過去是否發生過類似的事件。 - 許可證。 盡管可能工作量巨大,但這一檢查表對于依賴同樣適用。如果知道應用程序會大量依賴一個特定的庫,那么至少應該對這個庫的每一個依賴使用這個檢查表。 不管最終使用哪個庫,都要像其他工具一樣對待,因為即使是有用的工具也可能會造成嚴重的損害。盡管不常發生,但問問你自己:如果你有一把錘子,你會拿著它滿屋跑因而可能意外地損壞屋子里的東西,還是會把它放在工具架上或者車庫里,遠離那些貴重而易碎的東西,僅在需要的時候才拿出來? 對于外部庫道理是一樣的,不管它們多么有用,都需要注意避免讓這些庫和實際的源代碼耦合過于緊密。否則,如果出了問題,你就需要切換庫,這很可能需要重寫大量的代碼。更好的辦法是寫自己的API,用一個包裝器對外部庫進行封裝,將其與自己的源代碼隔離。自己的程序無需知道用了什么外部庫,只要知道API提供了哪些功能即可。想要換一個不同的庫?只需要修改包裝器就可以了。只要它仍然提供同樣的功能,那么完全不需要修改其余的核心代碼。也許會有例外,但應該不會太多。大部分庫都被設計成只專注解決一定范圍的問題,因此很容易隔離。 5.7.3節將會涉及如何使用入口點構建驅動系統(driver system),這個系統讓你可以將項目的某些部分設計成可以根據需要切換的模塊。
                  <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>

                              哎呀哎呀视频在线观看