2016-04-29 69 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)中的一个的设置和配置,并具有用于功能的其他模块。

希望这有帮助,请评论,如果有什么不清楚。