导入包下的子类: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.py
或python -m test
要 运行 package/test.py
,您将不得不使用 python -m package.test
./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
.
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.py
或python -m test
要 运行 package/test.py
,您将不得不使用 python -m package.test