Python导入无效,尽管在父文件夹中创建了__init__

0 投票
1 回答
31 浏览
提问于 2025-04-13 13:48

为什么这个 import 语句不管用,即使我在每个文件夹里都创建了 __init__ 文件?

Python中的导入不工作

我想从 basepackage\package1\p1\p1py.py 中导入 func1()。根文件夹 basepackage 在我的桌面上。

import package1.p1.p1py
import basepackage.package1.p1.pipy as okay     '''this king of import statement is showing error'''
okay.func1()
package1.p1.p1py.func1()  

上面的代码不工作,并且抛出了以下错误:

File "c:\Users\shiv\Desktop\basepackage\package1\p11\p11py.py", line 1, in <module>
import package1.p1.p1py
ModuleNotFoundError: No module named 'package1'

1 个回答

0

在这个包里面,你需要使用相对导入,而不是直接用包的名字来导入(这样做只有在包已经安装在你的Python路径里时才有效)。

比如说,如果我有一个这样的包:

base
.
└── package1
    ├── __init__.py
    ├── p1
    │   ├── __init__.py
    │   └── p1py.py
    └── p11
        ├── __init__.py
        └── p11py.py

p1py.py里面包含:

def func1():
    print("Hello!")

那么,如果你想让p11py.py能够使用func1,你可以让它包含:

# relative import from p1.p1py
from ..p1.p1py import func1

def func2():
    # use func1!
    func1()

接着,在base目录下,你可以这样做:

from package1.p11.p11py import func2

func2()
Hello!

想了解更多关于相对导入的问题和答案,可以看看例如这个链接

撰写回答