3 级链接 python 导入失败
3 level chained python import is failing
我有以下 3 个级别的文件夹结构:folder1 包含 folder1_1,后者又包含 folder1_1_1。现在我们在每个文件夹中都有一个 .py 文件(除了显然需要的 'init.py' 之外,抱歉,我不知道如何在前后放置这两行) .
folder1
L __init__.py
L file1.py
L folder1_1
L __init__.py
L file1_1.py
L folder1_1_1
L __init__.py
L file1_1_1.py
文件内容
file1.py
from folder1_1.file1_1 import Test1_1 as lvl2
class Test1:
randomnumber = 1
sum = randomnumber + lvl2.sum
print (sum)
file1_1.py
from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
class Test1_1:
somenumber = 1
sum = somenumber + lvl3.someothernumber
print (sum)
file1_1_1.py
class Test1_1_1:
someothernumber = 1
所以每个文件都是从直接下层文件夹导入的。一步有效:
当我 运行 file1_1.py 来自 file1_1_1 的导入工作正常时,它会产生所需的结果 (2)
但是文件 1 中的“2 级”导入失败:
File "c:\Users\DSCO\Documents\folder1\folder1_1\file1_1.py", line 1, in <module>
from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
ModuleNotFoundError: No module named 'folder1_1_1'
如何以这种方式导入?或者我需要重新排列我的文件夹吗?在实际代码中,这个结构与 file1_1 有很多指向 file1_1_1 的导入语句,这实际上是很多文件。这就是单独的子文件夹 (folder1_1_1) 的原因
我检查了多个 S.O。问题,但我估计它们都有些不同。
PEP 366 在这里可能很有趣,但在这种情况下您不需要 -m
标志。在您的情况下,唯一的区别是 folder1_1/file1_1.py 中的导入。我从条目 name 开始导入,它是 运行,因此包含 folder1_1
。您还可以在这些答案中看到更多信息:
- How to do relative imports in python
- python packaging for relative imports
最接近您的示例的是:
文件树
➜ tree
.
├── file1.py
└── folder1_1
├── __init__.py
├── file1_1.py
└── folder1_1_1
├── __init__.py
└── file1_1_1.py
file1.py
#!/usr/bin/env python3
from folder1_1.file1_1 import Test1_1 as lvl2
class Test1:
randomnumber = 1
sum = randomnumber + lvl2.sum
print(sum)
if __name__ == "__main__":
t1 = Test1()
folder1_1/file1_1.py
from folder1_1.folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
class Test1_1:
somenumber = 1
sum = somenumber + lvl3.someothernumber
print(sum)
folder1_1/folder1_1_1/file1_1_1.py
class Test1_1_1:
someothernumber = 1
print(someothernumber)
现在,如果您 运行 来自顶级文件夹:
./file1.py
它产生输出:
1
2
3
我有以下 3 个级别的文件夹结构:folder1 包含 folder1_1,后者又包含 folder1_1_1。现在我们在每个文件夹中都有一个 .py 文件(除了显然需要的 'init.py' 之外,抱歉,我不知道如何在前后放置这两行) .
folder1
L __init__.py
L file1.py
L folder1_1
L __init__.py
L file1_1.py
L folder1_1_1
L __init__.py
L file1_1_1.py
文件内容 file1.py
from folder1_1.file1_1 import Test1_1 as lvl2
class Test1:
randomnumber = 1
sum = randomnumber + lvl2.sum
print (sum)
file1_1.py
from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
class Test1_1:
somenumber = 1
sum = somenumber + lvl3.someothernumber
print (sum)
file1_1_1.py
class Test1_1_1:
someothernumber = 1
所以每个文件都是从直接下层文件夹导入的。一步有效: 当我 运行 file1_1.py 来自 file1_1_1 的导入工作正常时,它会产生所需的结果 (2)
但是文件 1 中的“2 级”导入失败:
File "c:\Users\DSCO\Documents\folder1\folder1_1\file1_1.py", line 1, in <module>
from folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
ModuleNotFoundError: No module named 'folder1_1_1'
如何以这种方式导入?或者我需要重新排列我的文件夹吗?在实际代码中,这个结构与 file1_1 有很多指向 file1_1_1 的导入语句,这实际上是很多文件。这就是单独的子文件夹 (folder1_1_1) 的原因 我检查了多个 S.O。问题,但我估计它们都有些不同。
PEP 366 在这里可能很有趣,但在这种情况下您不需要 -m
标志。在您的情况下,唯一的区别是 folder1_1/file1_1.py 中的导入。我从条目 name 开始导入,它是 运行,因此包含 folder1_1
。您还可以在这些答案中看到更多信息:
- How to do relative imports in python
- python packaging for relative imports
最接近您的示例的是:
文件树
➜ tree
.
├── file1.py
└── folder1_1
├── __init__.py
├── file1_1.py
└── folder1_1_1
├── __init__.py
└── file1_1_1.py
file1.py
#!/usr/bin/env python3
from folder1_1.file1_1 import Test1_1 as lvl2
class Test1:
randomnumber = 1
sum = randomnumber + lvl2.sum
print(sum)
if __name__ == "__main__":
t1 = Test1()
folder1_1/file1_1.py
from folder1_1.folder1_1_1.file1_1_1 import Test1_1_1 as lvl3
class Test1_1:
somenumber = 1
sum = somenumber + lvl3.someothernumber
print(sum)
folder1_1/folder1_1_1/file1_1_1.py
class Test1_1_1:
someothernumber = 1
print(someothernumber)
现在,如果您 运行 来自顶级文件夹:
./file1.py
它产生输出:
1
2
3