2012-10-06 84 views
2

我正在開發不同的.py文件(示例DisplayTools.py,CollectionTools.py ...)中的python函數,以便將它們作爲工具導入到更一般的文件Start.py中。如果所有文件都在同一個目錄中,它工作正常。我可以在Start.py「導入DisplayTools」中說... 但是如何以更多項目的方式組織這些項目並且更方便用戶(他們只需要在Start.py文件中工作)。對於具有這樣的文件結構例子:Handlng python項目和文件組織

  • 項目/

    Start.py

    • 工具/

      DisplayTools.py

      CollectionTools.py

我讀過__init__文件的使用,但它們是如何工作的,放置這些文件的位置以及它們包含的是什麼?

如果你有一些幫助,讓我以這種方式組織我的項目。

非常感謝

回答

5

我重構代碼組織只是有點給你的頂層目錄更具描述性的名稱。今天,我選擇happy_bananas。所以我們可以說你組織你這樣的文件:

happy_bananas 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

那麼所有你需要做的就是添加一個空__init__.py文件,你可以使用它就像任何其他的包裝,如:

happy_bananas 
    __init__.py 
    start.py 
    DisplayTools.py 
    CollectionTools.py 

而且現在,如果你可以這樣做:

from happy_bananas import DisplayTools

就像你面前。

現在,要將它加入到您的系統中,您需要打包並使用安裝腳本。您可以使用distutilssetuptools來做到這一點,但也許最簡單的現有描述是在Zed Shaw的Learn Python The Hard Way Exercise 46中。你真的可以複製/這些文件粘貼與那裏描述並以目錄結構像這樣結束:

happy_bananas 
    setup.py 
    tests 
     test_happy_bananas.py 
    happy_bananas 
     __init__.py 
     start.py 
     DisplayTools.py 
     . 
     . 

然後,當你有你的安裝腳本寫的,你可以進入你的文件夾,運行python setup.py install(或python setup.py develop)並且能夠在任何文件中使用import happy_bananas

另一方面,Python中的命名約定是爲文件名和函數名使用snakecase。因此,而不是DisplayTools.py,最好將其重命名爲display_tools.py。 CamelCase通常只用於類名。

+0

很好的答案,但可能是OP的矯枉過正。 –

+0

我並不真正使用安裝程序。根據我在問題中提出的文件樹,從工具導入DisplayTools.py不工作(即使在Tools目錄中有一個空的'__init__'文件)... [感謝您對namin約定的評論] – user1187727

+0

包裝是我期望的更復雜的演變。我會盡力在稍後處理。我希望用戶根據Tools/DisplayTools.py中的函數填寫Start.py,例如! – user1187727

0

對於初學者來說,我只是簡單地將文件更改爲具有一組函數和一些主代碼,因爲這些文件也可以被執行。

例如:

if __name__ == "__main__": 
    dosomething() 

然後在主,只需導入其他腳本,你可以用用有不實際運行該腳本的功能。