python - ModuleNotFoundError : No module named msg1 (in ubuntu with python 2. 7.6 未显示任何错误)

标签 python python-3.x package

目录结构

测试.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.pymsg3.py 也与 msg1.py 相同 我在 Windows 电脑上使用 python 3.7.0 运行这个

出现以下错误 PackageError

请帮帮我

谢谢!

最佳答案

这就是你的程序崩溃的原因。每当从终端启动脚本时,它都会将文件的当前路径附加到 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/

相关文章:

python - 使用 spark REST API 运行 pyspark 脚本

python - 如何使用 PyMongo 在 python 中执行通配符搜索 mongoDB

python - 命名空间的概念,全局,局部相对于导入

Python (PyQt5) 版本的 Qt 标注示例

python - 测试 Flask app.config

python - 将 pyplot 点作为参数传递

python - 比较 numpy.ndarray 中特定位置的元素

python - sys.path 上的包,带有 init 导入名称,可以在内部使用,但不能从外部使用

emacs - Emacs 是否有某种 "package-search"函数可用?

r - 文档中的 Travis CI R 包错误