FastAPI+Uvicorn运行时core模块找不到问题求助
解决FastAPI集成时
ModuleNotFoundError: No module named 'core'问题 问题出在Python的模块查找路径差异上:
- 单独运行
twitter_spider.py时,Python会自动将脚本所在目录(或执行命令时的当前工作目录)加入模块查找路径sys.path,因此能找到同级的core目录。 - 通过
uvicorn启动FastAPI服务时,入口是main.py,此时Python的模块查找路径以main.py所在的项目根目录为准,但twitter_spider.py位于services子目录中,当它执行from core import ...的绝对导入时,若core目录不在Python的查找路径中,就会触发模块找不到的错误。
解决方案
方法1:手动添加项目根目录到查找路径
修改twitter_spider.py,在导入core模块前,将项目根目录加入sys.path:
import sys from pathlib import Path # 获取项目根目录(假设services目录直接在根目录下) project_root = Path(__file__).parent.parent sys.path.append(str(project_root)) # 后续原导入代码不变 from core import Twitter_Conecction from core import config # 其余代码...
这种方法无需调整运行方式,单独运行和FastAPI集成都能正常工作。
方法2:使用相对导入(需调整运行方式)
如果项目是标准包结构(所有目录下都有__init__.py文件),可将twitter_spider.py的导入改为相对路径:
from ..core import Twitter_Conecction from ..core import config
注意:使用相对导入后,不能直接运行twitter_spider.py,需从项目根目录执行:
python -m services.twitter_spider
方法3:设置PYTHONPATH环境变量
启动uvicorn前,将项目根目录添加到PYTHONPATH环境变量中:
- Linux/macOS终端:
export PYTHONPATH="/你的项目根目录路径" uvicorn main:app --reload - Windows命令提示符:
set PYTHONPATH=C:\你的项目根目录路径 uvicorn main:app --reload - Windows PowerShell:
$env:PYTHONPATH = "C:\你的项目根目录路径" uvicorn main:app --reload
设置后,Python会自动在指定路径下查找core模块。
方法4:将项目安装为可编辑包
在项目根目录下创建pyproject.toml文件(示例内容如下),然后将项目安装为可编辑包:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "your-project-name" version = "0.1.0" packages = ["core", "services", "models", "config", "schema"]
执行安装命令:
pip install -e .
这样core会被当作Python标准安装包,任何位置都能正常导入。
内容的提问来源于stack exchange,提问作者Sir-Sorg
相关产品推荐
相关产品推荐

