虚拟环境外运行Python项目出现src.core.module1模块找不到错误求助
这个问题的核心是Python模块搜索路径(sys.path)在虚拟环境和系统环境中的差异。当你在虚拟环境内运行时,项目根目录被自动加入了sys.path,Python能找到src模块;但系统Python的sys.path里没有这个路径,所以找不到你项目里的模块。下面是几种可行的解决方法:
方法1:调整导入语句(最简单)
如果你的main.py放在src目录下,那么src就是当前运行脚本的所在目录(或工作目录),你不需要在导入时加上src前缀。直接修改导入语句:
from core.module1 import stuff
这样不管在虚拟环境还是系统环境中运行,只要你在src目录下执行python main.py,Python都能找到core.module1。
方法2:手动将项目根目录加入sys.path
如果你不想修改导入语句,可以在main.py的最开头添加一段代码,把项目根目录(也就是src的父目录)加入Python的搜索路径:
import sys import os # 获取main.py文件的绝对路径,然后向上回溯到项目根目录 script_dir = os.path.abspath(os.path.dirname(__file__)) project_root = os.path.dirname(script_dir) # 将项目根目录插入到sys.path的最前面,确保优先搜索 sys.path.insert(0, project_root) # 现在可以正常导入了 from src.core.module1 import stuff
这段代码会自动识别项目根目录,不管你在哪里运行main.py,都能让Python找到src模块。
方法3:设置PYTHONPATH环境变量
在Windows系统中,你可以通过设置PYTHONPATH环境变量,让系统Python知道你的项目根目录。打开命令提示符,先执行:
set PYTHONPATH=C:\你的项目根目录路径
比如你的项目根目录是D:\my_python_project,就输入:
set PYTHONPATH=D:\my_python_project
然后再运行main.py:
cd D:\my_python_project\src python main.py
这样系统Python就会把项目根目录加入搜索路径,顺利找到src.core.module1。
方法4:使用正确的运行路径
回到你的项目根目录,直接运行:
python src/main.py
这种情况下,不管是虚拟环境还是系统Python,都会自动把项目根目录加入sys.path,你的原始导入语句from src.core.module1 import stuff就能正常工作,不需要做任何修改。
内容的提问来源于stack exchange,提问作者Marv

