我正在开发一个 FastAPI 项目,用 Poetry 管理依赖关系。这是我当前的 pyproject.toml 文件:
[tool.poetry]
name = "navigo-backend"
version = "0.1.0"
description = ""
authors = ["Se"]
readme = "README.md"
packages = [{include = "src"}]
[tool.poetry.dependencies]
python = "^3.12"
fastapi = "^0.115.4"
pydantic-settings = "^2.6.1"
sqlalchemy = "^2.0.36"
python-jose = "^3.3.0"
passlib = "1.6.5"
docling = "^2.4.2"
psycopg2-binary = "^2.9.10"
bcrypt = "2.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
我的 FastAPI 应用程序位于 src 目录下的 main.py 文件中。要运行该应用程序,我使用以下命令:
诗歌运行 uvicorn src.main:app --reload --port 5000
问题:
当我运行此命令时,出现以下错误:
从 docling.datamodel.pipeline_options 导入 PdfPipelineOptions ModuleNotFoundError:没有名为“docling”的模块
其他详细信息: 1. 依赖项:我在 [tool.poetry.dependencies] 下的 pyproject.toml 文件中添加了 docling 作为依赖项,版本为“^2.4.2”。 2.安装:我运行了诗歌安装以确保安装了所有依赖项。 3. 项目结构:我的 src 目录包含 main.py 文件,该文件应该启动应用程序。
尝试解决: 1. 依赖性检查:我运行诗秀显示docling来确认docling包已安装,并且它出现在列表中。 2. Python路径:我尝试显式地将src添加到PYTHONPATH以确保源目录被识别。
问题:
为什么Python无法找到docling,即使它被列为已安装的依赖项?
您面临的问题可能是由于您构建项目的方式以及运行应用程序的方式造成的。
在您的
pyproject.toml
文件中,您有以下行:
packages = [{include = "src"}]
这告诉 Poetry 将
src
目录包含在包中。但是,当您运行命令 poetry run uvicorn src.main:app --reload --port 5000
时,您告诉 uvicorn 在 main
目录中查找 src
模块,但 docling
模块未包含在包中。
要解决此问题,您有以下几种选择:
修改您的项目结构:将
main.py
文件移动到项目目录的根目录,并更新您的 pyproject.toml
文件以将 src
目录包含为包:
[tool.poetry]
name = "navigo-backend"
version = "0.1.0"
description = ""
authors = ["Se"]
readme = "README.md"
packages = [{include = "src"}]
[tool.poetry.dependencies]
python = "^3.12"
fastapi = "^0.115.4"
pydantic-settings = "^2.6.1"
sqlalchemy = "^2.0.36"
python-jose = "^3.3.0"
passlib = "1.6.5"
docling = "^2.4.2"
psycopg2-binary = "^2.9.10"
bcrypt = "2.0.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
然后,您可以使用以下命令运行您的应用程序:
poetry run uvicorn main:app --reload --port 5000
使用绝对导入:如果您希望保持项目结构不变,则可以在
main.py
文件中使用绝对导入。使用 from docling.datamodel.pipeline_options import PdfPipelineOptions
代替 from src.docling.datamodel.pipeline_options import PdfPipelineOptions
。
然后,您可以使用以下命令运行您的应用程序:
poetry run uvicorn src.main:app --reload --port 5000
这些解决方案中的任何一个都应该可以解决您遇到的
ModuleNotFoundError
问题。