Python导入语句使用文件路径报错:ModuleNotFoundError问题咨询
解决跨目录Python模块导入报错的问题
我之前也踩过这个跨目录导入的坑!你的报错ModuleNotFoundError: No module named '__main__.Scripts'; '__main__' is not a package,本质是因为Python找不到Scripts这个包的路径,而且主脚本(mainprogram.py)作为__main__运行时,不能直接用相对导入。下面给你几个实用的解决办法:
方法1:把Scripts变成Python包
这是最规范的做法:
- 在Scripts文件夹里新建一个空的
__init__.py文件(哪怕文件里什么都不写也行),这样Python就会把Scripts识别为一个可导入的包。 - 然后在mainprogram.py里用下面的语句导入:
from Scripts.Data import * # 或者如果你不想导入所有函数,也可以指定具体函数:from Scripts.Data import func1, func2
方法2:手动添加路径到sys.path
如果不想改文件夹结构,可以在mainprogram.py的最开头添加代码,把Scripts目录加入Python的模块搜索路径:
import sys import os # 获取当前mainprogram.py所在的目录 current_dir = os.path.dirname(__file__) # 拼接Scripts目录的路径 scripts_dir = os.path.join(current_dir, 'Scripts') # 把Scripts目录添加到sys.path sys.path.append(scripts_dir) # 现在就可以正常导入了 from Data import *
方法3:用IDE标记Sources Root(如果用IDE开发)
如果你是用PyCharm、VS Code这类IDE:
- 右键Scripts文件夹,选择Mark Directory as -> Sources Root(PyCharm),或者在VS Code的设置里把Scripts添加到Python路径。
- 这样IDE会自动帮你把这个目录加入到Python的搜索路径里,直接用
from Scripts.Data import *就能正常导入了。
注意点
别用相对导入(比如from .Scripts.Data import *),因为当你直接运行mainprogram.py时,它是作为__main__模块执行的,不是一个包,相对导入在这种场景下会报错。
内容的提问来源于stack exchange,提问作者Joe Allen
相关产品推荐
相关产品推荐

