Python本地模块导入报错(ImportError: No module named lib.redisdb)解决咨询
解决Python模块导入错误:No module named lib.redisdb
这个问题的核心原因是Python的模块搜索路径里没有包含你的server/目录。当你直接运行my_first_script.py时,Python只会把脚本所在的server/scripts/目录加入搜索路径,但lib和config都在server/下,所以找不到这些模块。下面给你几个简单的解决办法:
方法1:用模块方式运行脚本(推荐)
直接在项目的根目录(也就是server/的上级目录)运行这个命令:
python -m server.scripts.my_first_script
这种方式会让Python把server/目录识别为一个包,自动处理模块的导入路径,不需要额外配置环境变量或者修改代码。
方法2:临时设置PYTHONPATH环境变量
在终端里先把server/目录加入PYTHONPATH,再运行脚本:
Linux/macOS
export PYTHONPATH=/full/path/to/your/server:$PYTHONPATH python server/scripts/my_first_script.py
Windows(CMD)
set PYTHONPATH=C:\full\path\to\your\server;%PYTHONPATH% python server\scripts\my_first_script.py
注意替换成你实际的server/目录路径,这种方式是临时生效的,关闭终端后就会失效。
方法3:在脚本中手动添加路径
在my_first_script.py的最顶部添加这段代码,把server/目录加入Python的搜索路径:
import sys import os # 获取当前脚本所在目录的父目录的父目录(也就是server/目录) root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, root_dir)
添加完之后,再保留你原来的导入代码,这样运行脚本时就能找到lib和config模块了。
方法4:使用相对导入(仅适用于包内运行)
把你的导入语句改成相对导入的形式:
import pickle from ...lib.redisdb import r import re from ...config import application as appconf
但这种方式不能直接运行脚本,必须用方法1中的python -m server.scripts.my_first_script命令来运行,否则会抛出ValueError: attempted relative import beyond top-level package的错误。
内容的提问来源于stack exchange,提问作者Happy Coder
相关产品推荐
相关产品推荐

