我收到导入错误,但在使用 fastapi 的 Python 文件中,但如果我手动运行 python 文件,它工作正常

问题描述 投票:0回答:1

到目前为止我正在开发一个 FastAPI 项目。您可以在这里查看文件树

enter image description here

分类管道文件中有以下几行:

import requests
from typing import Dict, List 

from prompts import (
    json_example, json_extractor_prompt, 
    definitions, 
)

import re 
import json 

从提示.py 文件中导入变量。

当我使用 uvicorn main:app -reload 运行文件时

它不起作用并抛出以下错误

(ast) ➜  project-astra git:(main) ✗ uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['/home/kyojinprat/project-astra']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [18196] using WatchFiles
Process SpawnProcess-1:
Traceback (most recent call last):
  File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/_subprocess.py", line 80, in subprocess_started
    target(sockets=sockets)
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/server.py", line 65, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1518, in uvloop.loop.Loop.run_until_complete
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/server.py", line 69, in serve
    await self._serve(sockets)
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/server.py", line 76, in _serve
    config.load()
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/config.py", line 434, in load
    self.loaded_app = import_from_string(self.app)
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/importer.py", line 22, in import_from_string
    raise exc from None
  File "/home/kyojinprat/project-astra/ast/lib/python3.10/site-packages/uvicorn/importer.py", line 19, in import_from_string
    module = importlib.import_module(module_str)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/kyojinprat/project-astra/main.py", line 24, in <module>
    from data_classifier.classification_pipeline import get_json
  File "/home/kyojinprat/project-astra/data_classifier/classification_pipeline.py", line 4, in <module>
    from prompts import (
ModuleNotFoundError: No module named 'prompts'

但是当我运行 python data_classifier/classification_pipeline.py 时

它有效。 究竟发生了什么?

令人惊讶的是,端点昨天正常工作。所以很可能是我所做的一些改变造成的。但我不明白那可能是什么。如果您需要,我会发送更多片段

python import fastapi
1个回答
0
投票

当您使用 uvicorn 运行 FastAPI 应用程序时,它会从 main.py 启动应用程序,而不是直接执行您的脚本。工作目录可能设置为项目根目录 (project-astra),因此 python 尝试从此文件夹中查找提示模块。如果找不到它,您会收到 ModuleNotFoundError。

尝试在classification_pipeline中的

.
之前添加
prompts

from .prompts import (
    json_example, json_extractor_prompt, 
    definitions
)

这将使Python在当前包中查找

prompts
,其中
classification_pipeline.py

© www.soinside.com 2019 - 2024. All rights reserved.