导入包下的子类:ModuleNotFoundError

Importing a subclass where it is under a package: ModuleNotFoundError

./package/test.py 工作顺利。我期待 ./test.py 会像那样顺利工作,但我得到这个 运行 ./test.py:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    from package.subclass import Subclass
  File ".../package/subclass.py", line 1, in <module>
    from subclass import Subclass
ModuleNotFoundError: No module named 'subclass'

可以导入class1。当它读取子类的第一行时,它会给出 ModuleNotFoundError。 我试过 ./package/__init__.py,一个空的会给出与上面相同的错误。当我在 ./package/__init__.py 中进行适当的导入时,错误甚至无法在 __init__.py.

的第 1 行中找到 class1

文件目录如下:

./package/class1.py
./package/class2.py
./package/subclass.py
./package/test.py
./test.py

代码:

# ./package/class1.py
class Class1():
...

# ./package/class2.py
class Class2():
...


# ./package/subclass.py
from class2 import Class2
class Subclass(Class2):
...

# ./package/test.py
from class1 import Class1
from subclass import Subclass
...

# ./test.py
from package.class1 import Class1
from package.subclass import Subclass
...

尝试向目录中添加一个空 __init__.py

__init__.py 告诉 python 解释器它正在处理的目录实际上是一个模块。

希望对您有所帮助!

除了正确的 __init__.py,您还需要使用:

from package.class1 import Class1
from package.subclass import Subclass

注意添加的 package.。一个点也可以,因为那将是一个相对的导入。

设置 PYTHONPATH 可能是一个选项。或者,给定您当前的结构:

#subclass.py
from .class2 import Class2

class Subclass(Class2):
    pass

#package/test.py
from .class1 import Class1
from .subclass import Subclass

#test.py
from package.class1 import Class1
from package.subclass import Subclass

至运行test.py,只需运行python test.pypython -m test 要 运行 package/test.py,您将不得不使用 python -m package.test