导入 python 个模块时出错
Errors when importing python modules
我在编译的时候出现了如下错误。为什么会出现错误?提前致谢。
cd /root/rel_path/ctlib/src
python3 main_prog.py
错误:
root@Linux:~/rel_path/ctlib/src# python3 main_prog.py
Traceback (most recent call last):
File "main_prog.py", line 1, in <module>
from ctlib.auto import CtAuto
ModuleNotFoundError: No module named 'ctlib'
root@Linux:~/rel_path/ctlib/src
示例路径树:
/root/rel_path/
|--- ctlib
|--- src
|--- main_prog.py
|--- auto
|--- __init__.py
代码:
main_prog.py代码:
from ctlib.auto import CtAuto
print("hello")
初始化.py代码:
#!/usr/bin/env python3
class CtAuto:
def print_hello(self):
print("Hello, from CtAuto")
您的导入实际上是在 auto.py 中寻找 CtAuto class,它在您的树中不存在:
/root/rel_path/
|--- ctlib
|--- src
|--- main_prog.py
|--- auto
|--- __init__.py
|--- auto.py
改用 from ctlib.auto.auto import CtAuto
并将您的 CtAuto class 放入 /root/rel_path/ctlib/auto/auto.py
[编辑]
因为您 __main__
在子目录中,所以您需要将项目的根目录添加到 Pythonpath
。 (导入前 CtAuto
)
import sys
sys.path.append('../../')
或
import sys
sys.path.append('/root/rel_path/')
由于你是运行子级(child)中的程序,并且在同一级导入而不创建任何包,这是同一级的相对导入。
像下面这样更改 main_prog.py 将使其生效。
import sys
sys.path.append("..")
from auto import CtAuto
print("hello")
我在编译的时候出现了如下错误。为什么会出现错误?提前致谢。
cd /root/rel_path/ctlib/src
python3 main_prog.py
错误:
root@Linux:~/rel_path/ctlib/src# python3 main_prog.py
Traceback (most recent call last):
File "main_prog.py", line 1, in <module>
from ctlib.auto import CtAuto
ModuleNotFoundError: No module named 'ctlib'
root@Linux:~/rel_path/ctlib/src
示例路径树:
/root/rel_path/
|--- ctlib
|--- src
|--- main_prog.py
|--- auto
|--- __init__.py
代码:
main_prog.py代码:
from ctlib.auto import CtAuto
print("hello")
初始化.py代码:
#!/usr/bin/env python3
class CtAuto:
def print_hello(self):
print("Hello, from CtAuto")
您的导入实际上是在 auto.py 中寻找 CtAuto class,它在您的树中不存在:
/root/rel_path/
|--- ctlib
|--- src
|--- main_prog.py
|--- auto
|--- __init__.py
|--- auto.py
改用 from ctlib.auto.auto import CtAuto
并将您的 CtAuto class 放入 /root/rel_path/ctlib/auto/auto.py
[编辑]
因为您 __main__
在子目录中,所以您需要将项目的根目录添加到 Pythonpath
。 (导入前 CtAuto
)
import sys
sys.path.append('../../')
或
import sys
sys.path.append('/root/rel_path/')
由于你是运行子级(child)中的程序,并且在同一级导入而不创建任何包,这是同一级的相对导入。
像下面这样更改 main_prog.py 将使其生效。
import sys
sys.path.append("..")
from auto import CtAuto
print("hello")