如何在Python脚本中调用其他脚本?同目录导入模块报错求助
解决同一目录下Python脚本导入的ModuleNotFoundError问题
嘿,我遇到过一模一样的问题!同一目录下导入脚本却报错找不到模块,通常是路径或者命名的小问题,咱们一步步来排查解决:
先确认基础细节
- 先仔细检查:
case.py的文件名拼写完全正确吗?比如有没有写成Case.py?在Linux/macOS这类区分大小写的系统里,Python会严格区分文件名大小写,哪怕只差一个字母都导不进来;Windows虽然不区分,但统一命名习惯能避免很多坑。 - 看看脚本所在目录里有没有和
case.py同名的其他文件(比如case.txt)或者文件夹,这会导致Python识别混乱。
方法1:确保运行时的工作目录正确
很多时候报错是因为你运行final.py的工作目录不是脚本所在的目录。比如你在上级目录执行python src/final.py,Python会默认在当前工作目录(上级目录)里找case.py,自然找不到。解决办法有两个:
- 打开终端,先cd到两个脚本所在的目录,再执行
python final.py; - 如果不方便切换目录,可以在
final.py的最开头添加这段代码,把脚本所在目录手动加入Python的搜索路径:
import sys import os # 将当前脚本所在目录添加到Python的模块搜索路径 sys.path.append(os.path.dirname(os.path.abspath(__file__))) # 之后再导入模块 import case as f_case qry = '' qry += f_case.generate_case('R162') print(qry)
方法2:添加空的__init__.py文件(规范做法)
虽然Python 3.3及以上版本支持无__init__.py的命名空间包,但有些IDE或者旧环境还是需要这个文件来识别目录为Python包。你只需要在两个脚本所在的目录下创建一个空的__init__.py文件就行,不需要写任何内容,这样Python就能正确识别本地模块了。
方法3:排查第三方库命名冲突
有没有可能你的Python环境里安装了一个名为case的第三方库?如果有的话,Python会优先导入这个第三方库,而不是你的本地脚本。你可以:
- 运行
pip list看看有没有名为case的包; - 如果有且不需要的话,执行
pip uninstall case卸载它; - 或者直接把你的
case.py改个名字(比如my_case.py),然后在final.py里改成import my_case as f_case。
快速验证路径问题
你可以在final.py里先打印Python的模块搜索路径,看看脚本所在目录是不是在列表里:
import sys print(sys.path)
如果脚本所在目录不在输出的列表中,那肯定是路径问题,用方法1的代码添加路径就好。
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

