当前位置: 首页 > 知识库问答 >
问题:

还有另一个原因:试图在没有已知父包的情况下相对导入[重复]

濮阳宁
2023-03-14

我有以下目录结构:

py_test
├── __init__.py
├── dir1
│   ├── __init__.py
│   └── script1.py
└── dir2
    ├── __init__.py
    └── script2.py
from ..dir1 import script1
ImportError: attempted relative import with no known parent package`
import sys, os
path2add = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, 'dir1')))
if (not (path2add in sys.path)) :
    sys.path.append(path2add)

如果我想使用选项1,那么使其工作的最简单(即文件最少)的file/dir结构是什么?我知道这一点,但我想知道是否可以避免创建该目录结构,而仍然使用类型-1import

我目前正在使用这个变通方法,它使用type-2import

相关的:

共有1个答案

冯茂实
2023-03-14

正如注释中提到的,如果script2.py是您的入口点,则无法将模块导入到目录中。

正如本链接中提到的,您包括:

如果模块的__name__不包含任何包信息(例如,它被设置为__main__),那么不管模块实际位于文件系统中的哪个位置,相关导入都会被解析为模块是顶级模块。

这将按您希望的方式工作,但相当麻烦。

假设包中有多个脚本需要运行,则可以创建一个新文件,该文件同时导入script1script2,然后根据命令行参数调用所需的功能。这样,您就可以保持当前的目录结构,并使相关导入工作正常,而无需对sys.path进行任何操作。

 类似资料: