正确设计Python项目

正确设计Python项目,python,module,Python,Module,我计划进行以下结构的项目: ./runme.py ./my_modules/__init__.py ./my_modules/global_imports.py ./my_modules/user_defined_functions.py 想法是将重要变量存储在global\u imports.py中,然后使用从my\u modules.global\u imports*将它们导入runme.py(我知道这样导入模块是一种不好的做法,但我保证只有少数变量的名称不会冲突) 四个问题: globa

我计划进行以下结构的项目:

./runme.py
./my_modules/__init__.py
./my_modules/global_imports.py
./my_modules/user_defined_functions.py
想法是将重要变量存储在
global\u imports.py
中,然后使用
从my\u modules.global\u imports*
将它们导入
runme.py
(我知道这样导入模块是一种不好的做法,但我保证只有少数变量的名称不会冲突)

四个问题:

  • global\u imports.py
    中包含的两个变量应该是
    SCRIPT\u PATH
    SCRIPT\u DIR
    。我已经尝试了
    SCRIPT\u PATH=os.PATH.realpath(\uu文件\uu)
    SCRIPT\u DIR=os.PATH.dirname(SCRIPT\u PATH)
    ,但它为
    global\u imports.py
    返回路径(目录),而不是为
    runme.py
    返回路径(目录)。如何获取
    runme.py
    的路径(目录)

  • global\u imports.py内部,我可能会导入诸如
    os
    sys
    之类的模块。我还需要在
    runme.py
    中导入这些模块。当模块首先从另一个模块导入,然后从主脚本导入,或者反之亦然时,这是否被视为问题

  • 是否可以将变量从
    global\u imports.py
    导入
    用户定义的函数.py
    ?我认为这是不好的行为,我只是好奇而已。
  • 是否有更好的方法将项目分为模块


  • 按顺序回答您的问题:

  • 在第一个变量SCRIPT_DIR中,您将获得文件global_imports.py的完整路径,如下所示:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    现在为了获得RunMe.Py的目录,我们应该考虑另一个变量:

    SCRIPT_PATH_DIR = os.path.dirname(SCRIPT_PATH)
    
    这将为我们提供道路

    SCRIPT_PATH_DIR = '/home/../../my_project/my_modules/'
    
    现在,要访问其包含runme.py的父目录,我们可以如下所示:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    现在,SCRIPT_DIR给出了runme.py的路径,即:

    SCRIPT_DIR = '/home/../../my_project/'
    
  • 根据我们的项目结构,runme.py应该只确定主模块的导入,然后命令运行应用程序。所以,它不应该包含任何其他进口商品。但是,如果您需要使用模块,那么请在runme.py中显式导入它,正如Python的Zen所说的“显式优于隐式”

  • 是的,这是可能的,您可以这样做:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    但一般来说,您应该在“/../my_project/”目录中有一个单独的config.py或settings.py文件,该文件应该包含项目中任何地方可能需要使用的所有设置和变量

  • 就我所见,这种方法已经足够好了。您的主项目目录包含runme.py和项目内部使用的其他模块。”“我的_模块”是我认为的模块之一。在项目目录中可以有更多这样的模块。更好的方法是只在其中一个模块(如my_模块)内设置和配置,并为功能设置其他模块


  • 希望这有帮助,如果有不清楚的地方,请发表评论。

    按顺序回答您的问题:

  • 在第一个变量SCRIPT_DIR中,您将获得文件global_imports.py的完整路径,如下所示:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    现在为了获得RunMe.Py的目录,我们应该考虑另一个变量:

    SCRIPT_PATH_DIR = os.path.dirname(SCRIPT_PATH)
    
    这将为我们提供道路

    SCRIPT_PATH_DIR = '/home/../../my_project/my_modules/'
    
    现在,要访问其包含runme.py的父目录,我们可以如下所示:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    现在,SCRIPT_DIR给出了runme.py的路径,即:

    SCRIPT_DIR = '/home/../../my_project/'
    
  • 根据我们的项目结构,runme.py应该只确定主模块的导入,然后命令运行应用程序。所以,它不应该包含任何其他进口商品。但是,如果您需要使用模块,那么请在runme.py中显式导入它,正如Python的Zen所说的“显式优于隐式”

  • 是的,这是可能的,您可以这样做:

    SCRIPT_PATH = '/home/../../my_project/my_modules/global_imports.py'
    
    SCRIPT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH_DIR, os.pardir))
    
    from .global_imports import variable_name
    
    但一般来说,您应该在“/../my_project/”目录中有一个单独的config.py或settings.py文件,该文件应该包含项目中任何地方可能需要使用的所有设置和变量

  • 就我所见,这种方法已经足够好了。您的主项目目录包含runme.py和项目内部使用的其他模块。”“我的_模块”是我认为的模块之一。在项目目录中可以有更多这样的模块。更好的方法是只在其中一个模块(如my_模块)内设置和配置,并为功能设置其他模块

  • 希望这有帮助,如果有不清楚的地方,请发表评论