目录结构
测试.py
信息
__init.py
消息1.py
消息2.py
msg3.py
测试.py
import Info
Info.msg1()
Info.msg2()
Info.msg3()
init.py
from msg1 import msg1
from msg2 import msg2
from msg3 import msg3
msg1.py
def msg1():
print "This is msg1"
msg2.py
和 msg3.py
也与 msg1.py
相同
我在 Windows 电脑上使用 python 3.7.0 运行这个
请帮帮我
谢谢!
最佳答案
这就是你的程序崩溃的原因。每当从终端启动脚本时,它都会将文件的当前路径附加到 sys.path 中,并且 Python 只查找直接到达该路径的模块。在你的例子中,它附加到 test.py 的路径中,但是,从 Python 解释器的角度来看,msg1
仍然是 Info.
> 远离 test.py
目录,这是因为 sys.path
的目录仅到 test.py
而不是 Info
即目录链中存在间隙。因此,为了避免这个问题,您需要使用相对导入来避免名称依赖。将您的 __init__
更改为此,它应该可以工作。 或者您也可以将 Info
包的路径添加到 sys.path
中,虽然不推荐,但仍然可行。
from .msg1 import msg1
from .msg2 import msg2
from .msg3 import msg3
这是您可以做同样事情的另一种方法
import sys
sys.path.append(r'C:\Users\MyName\Desktop\Info') # Or you could os module to get dynamically
from msg1 import msg1
from msg2 import msg2
from msg3 import msg3
虽然这是更好的方法
import os
import sys
dir = os.path.join(os.getcwd(),'Info')
sys.path.append(dir)
如果你想让更改永久生效,即不是每次都添加 sys.path,你可以将路径导出或添加到 python 的环境变量中,它会自动选择它。
关于python - ModuleNotFoundError : No module named msg1 (in ubuntu with python 2. 7.6 未显示任何错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532041/