2016-04-29 66 views
1

我打算有項目,結構如下:Python項目的合理設計

./runme.py 
./my_modules/__init__.py 
./my_modules/global_imports.py 
./my_modules/user_defined_functions.py 

的想法是很重要的變量在global_imports.py從那裏他們將被導入到使用from my_modules.global_imports import *runme.py商店,我知道這是一個不好的做法,導入模塊這種方式,但我承諾,將與不衝突的名字只是幾個變量)

四個問題:

  1. global_imports.py中包含的兩個變量應該是SCRIPT_PATHSCRIPT_DIR。我試過SCRIPT_PATH = os.path.realpath(__file__)SCRIPT_DIR = os.path.dirname(SCRIPT_PATH),但它返回的路徑(目錄)爲global_imports.py而不是runme.py。我如何獲得runme.py的路徑(目錄)?

  2. Inside global_imports.py我可能會導入模塊,如ossys。我還需要在runme.py內導入這些模塊。這是否被認爲是問題,當模塊首先從另一個模塊導入,然後從主腳本導入時,反之亦然?

  3. 是否可以將變量從global_imports.py導入user_defined_functions.py?我認爲這只是一個壞習慣,我只是好奇而已。

  4. 是否有更好的方法將項目分成模塊?

回答

0

解決您的問題依次是:

  1. 在你所得到的文件global_imports.py的完整路徑的第一個變量SCRIPT_DIR,這將是這樣的:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py' 
    

    現在爲了得到runme.py的目錄,我們應該考慮另一個變量:

    SCRIPT_PATH_DIR = os.path.dirname(SCRIPT_PATH) 
    

    這會給我們的路徑

    SCRIPT_PATH_DIR = '/home/../../my_project/my_modules/' 
    

    現在去它的父目錄包含runme.py我們可以得到這樣的:

    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir)) 
    

    現在,SCRIPT_DIR給邵仁枚之路的.py即:

    SCRIPT_DIR = '/home/../../my_project/' 
    
  2. 根據我們的項目結構,runme.py應該只conrtain導入到主MODUL然後命令運行該應用程序。所以,它不應該包含任何其他進口。如果你需要使用一個模塊,然後明確地將它導入runme。PY的Python的禪的人說「明確優於隱式」

  3. 是的,這是可能的,你可以做這樣的:

    from .global_imports import variable_name 
    

    但一般而言,您應該有一個單獨的配置的.py或在其中應該包含所有你可能需要在項目的任何地方使用的設置和變量「/../my_project/」目錄settings.py文件。

  4. 這種方法是不夠好,據我見過。你的主要項目目錄包含在項目內部使用runme.py等模塊。 「my_modules」是我認爲的一個模塊。項目目錄中可以包含更多此類模塊。更好的方法是,以只有內部的模塊(諸如my_modules)中的一個的設置和配置,並具有用於功能的其他模塊。

希望這有幫助,請評論,如果有什麼不清楚。