如何导入位于父目录中的模块(python 文件)?
两个目录中都有一个
__init__.py
文件,但我仍然无法从父目录导入文件?
在此文件夹布局中,脚本 B 正在尝试导入脚本 A:
Folder A:
__init__.py
Script A:
Folder B:
__init__.py
Script B(attempting to import Script A)
脚本 B 中的以下代码不起作用:
import ../scriptA.py # I get a compile error saying the "." is invalid
您不会在导入模块的 Python 中导入脚本。一些 python 模块也是可以直接运行的脚本(它们在模块级别做一些有用的工作)。
一般来说,最好使用绝对导入而不是相对导入。
toplevel_package/
├── __init__.py
├── moduleA.py
└── subpackage
├── __init__.py
└── moduleB.py
在
moduleB
:
from toplevel_package import moduleA
如果您想将
moduleB.py
作为脚本运行,请确保toplevel_package
的父目录在您的sys.path
.中
来自docs:
from .. import scriptA
您可以在包中执行此操作,但不能在直接运行的脚本中执行。从上面的链接:
请注意,显式和隐式相对导入均基于 当前模块的名称。由于主模块的名称是 始终为“__main__”,旨在用作主模块的模块 Python 应用程序应始终使用绝对导入。
如果您创建一个导入 A.B.B 的脚本,您将不会收到 ValueError。
如果想直接运行脚本,可以:
PYTHONPATH
).sys.path
的路径。然后:
import module_you_wanted
我遇到了同样的问题,并在 PyPI 上发布了 syspend 模块 https://pypi.org/project/syspend/ 这将搜索具有特定命名文件的父目录,并调用 sys.path.append(目录:具有 SYSPEND_ROOT 文件)。
Folder A:
__init__.py
Script A:
Folder B:
__init__.py
Script B(attempting to import Script A)
SYSPEND_ROOT
在您的情况下,请放入 SYSPEND_ROOT 文件。空文件是可以的。 在你的 ScriptB.py
import syspend
import ScriptA
if __name__ == "__main__":
ScriptA.method()