Python导入自定义config模块提示ModuleNotFoundError问题求助
问题原因排查及解决方案
该ModuleNotFoundError由两个常见原因导致,可按以下步骤修复:
1. 修正包标识文件命名
Python识别文件夹为可导入包的前提是,文件夹下存在名为__init__.py的文件(注意前后各两个下划线),你当前config文件夹下的标识文件命名为__init.py,缺少末尾的两个下划线,直接重命名该文件为__init__.py即可,无内容也不影响包识别。
2. 修复Python模块搜索路径
你的test_db_conn.py放在db_functions子文件夹下,直接运行该脚本时,Python默认只会将脚本所在的db_functions目录加入搜索路径,找不到上层的config包,有两种常用修复方案:
- 方案A:从项目根目录运行脚本
不要进入db_functions文件夹运行脚本,在config和db_functions文件夹所在的项目根目录,执行运行命令即可:
使用python -m db_functions.test_db_conn-m参数以模块模式运行时,Python会自动将当前工作目录加入搜索路径,可正常识别config包。 - 方案B:脚本内主动添加上层目录到搜索路径
在test_db_conn.py的导入代码前新增路径添加逻辑:
这段代码会自动将项目根目录加入Python的模块搜索路径,后续导入config包不会报错。# 导入模块前先执行路径添加 import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 原有导入代码保持不变 from config import config_reader import pymongo # Query database and print result db_client = pymongo.MongoClient(db_url) db_status = db_client.test print(db_status)
可选长期优化
如果后续会频繁用到跨目录导入,可以在项目根目录下新增setup.py文件,通过安装开发版本的方式把项目路径永久加入Python搜索路径:
from setuptools import setup, find_packages setup( name="your_project_name", version="0.1", packages=find_packages(), )
然后在项目根目录执行pip install -e .即可生效。
内容的提问来源于stack exchange,提问作者rmso27
相关产品推荐
相关产品推荐

