如何组织一个python模块,使脚本可以作为_主程序运行?
我正在启动一个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(使
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的附加代码。
你能告诉我如何基于我的代码结构吗?你确定你的顶层代码不可用吗重要的?如果您的顶级代码不可导入(例如,如果您无法执行导入项目
并使其正常工作),那么将其作为一个包就毫无意义。