Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何组织一个python模块,使脚本可以作为_主程序运行?_Python_Import_Code Organization - Fatal编程技术网

如何组织一个python模块,使脚本可以作为_主程序运行?

如何组织一个python模块,使脚本可以作为_主程序运行?,python,import,code-organization,Python,Import,Code Organization,我正在启动一个python项目,代码结构如下: project/ __init__.py a.py b.py mainA.py utilities/ __init__.py mainB.py c.py \uuuu init\uuuu文件均为空 我想以程序的形式运行utilities/mainB.py(使

我正在启动一个python项目,代码结构如下:

project/
        __init__.py
        a.py
        b.py
        mainA.py
        utilities/
                   __init__.py
                   mainB.py
                   c.py
\uuuu init\uuuu
文件均为空

我想以程序的形式运行
utilities/mainB.py
(使用类似
python main.py
),mainB需要导入
a.py
b.py
。所以我试着从。。导入和其他一些方法,但导入失败。错误信息为:

ValueError:尝试在非包中进行相对导入

所以问题来了:

  • 如何修复
    mainB.py
    ,使其可以作为主程序运行
  • mainA.py
    现在可以作为主程序运行,它还导入
    a.py
    b.py
    (使用
    import a
    import b
    )。 我认为代码结构可能会变得更复杂。比如说,如果
    mainA.py
    必须从
    project/some/directory
    导入模块,我该怎么做

  • 您可以使用Python的内置模块运行功能(
    Python-m

    这允许您将mainB作为包的一部分正常写入,因此相对导入和绝对导入都将正常工作


    有关此功能的深入讨论,请参见。

    您可以使用Python的内置模块运行功能(
    Python-m

    这允许您将mainB作为包的一部分正常写入,因此相对导入和绝对导入都将正常工作


    有关此功能的深入讨论,请参阅。

    请参阅。你有两个选择。一种方法是使用中所述的
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    属性来设置模块的相对名称。另一种方法是将脚本作为模块执行(使用解释器的
    -m
    标志),而不是直接作为脚本运行它们。

    请参阅。你有两个选择。一种方法是使用中所述的
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    属性来设置模块的相对名称。另一种方法是将脚本作为模块执行(使用解释器的
    -m
    标志),而不是直接作为脚本运行它们。

    您应该在PYTHON\u路径中添加“project”dir,然后在mainB.py中:

    from project import a
    

    您应该在PYTHON_路径中添加'project'dir,然后在mainB.py中:

    from project import a
    

    PEP 366说,如果顶层软件包不可导入,则需要操作sys.path的
    附加代码才能直接执行。
    您能告诉我如何基于我的代码结构吗?您确定顶层代码不可导入吗?如果顶级代码不可导入(例如,如果您无法执行
    导入项目
    并使其正常工作)让它成为一个包没有多大意义。PEP 366说,如果顶层包不可导入,直接执行就需要操作sys.path的
    附加代码。
    你能告诉我如何基于我的代码结构吗?你确定你的顶层代码不可用吗重要的?如果您的顶级代码不可导入(例如,如果您无法执行
    导入项目
    并使其正常工作),那么将其作为一个包就毫无意义。