В FastAPI нет модуля с именем «мой модуль» — FastAPI не может найти мой пакет PythonPython

Программы на Python
Anonymous
В FastAPI нет модуля с именем «мой модуль» — FastAPI не может найти мой пакет Python

Сообщение Anonymous »

FastAPI не может найти мой пакет Python. Кажется относительно очевидным, что это проблема с путями и импортом Python, однако я не знаю, как ее исправить.
Что меня удивило, так это то, что это сработало при использовании Flask вместо FastAPI. Я преобразовал небольшое приложение из Flask в FastAPI, и именно тогда операторы импорта больше не могли найти мой пакет Python.
Я недостаточно знаю о FastAPI-cli, чтобы понять, что он делает/не делает с путями, чтобы знать, как это исправить.
Вот очень простой MWE.

Код: Выделить всё

# /fastapi/fastapi_mwe.py

from fastapi import FastAPI
from pydantic import BaseModel

from my_package import my_value

print(f'__name__={__name__}')
app = FastAPI()

class FastAPI_Value(BaseModel):
value: int

@app.get('/')
def root(fastapi_value: FastAPI_Value):
next_value = fastapi_value.value + my_value
return {
'next_value': next_value
}

Код: Выделить всё

# /my_package/__init__.py

my_value = 1
Вот структура проекта:

Код: Выделить всё

stack_overflow_mwe/
my_package/
__init__.py
fastapi/
fastapi_mwe.py
Вот как я запускаю fastapi_mwe.py:

Код: Выделить всё

user@host:/home/user/stackoverflow_mwe/$ fastapi dev fastapi/fastapi_mwe.py
ModuleNotFoundError: No module named `my_package`
Как мне структурировать этот проект и как это исправить? На самом деле мне не хочется помещать пакет my_package в подкаталог fastapi, потому что этот пакет должен быть полностью независим от оболочки/веб-сервера fastapi. У меня должна быть возможность создать новую подпапку с именем flask_api и импортировать my_package из обоих мест.
Я также старался избегать использования .venv< /code> и редактируемый файл install + pyproject.toml. Я использую виртуальные среды для управления зависимостями (например, я установил pip3 fastapi, чтобы установить пакет fastapi в локальный .venv). Если альтернативы нет, я могу создать pyproject.toml и настроить локальные пакеты как редактируемую установку, но на самом деле мне не хочется этого делать, если альтернативы нет.

Изменить: PYTHONPATH
Я попытался напечатать значение PYTHONPATH и обнаружил, что оно не существует. . (При работе с fastapi.)

Код: Выделить всё

import os

print(f'__name__={__name__}')
print(os.getcwd())
print(os.environ['PYTHONPATH'])
Это кажется странным, но предполагает, что что бы ни делал CLI fastapi, он не устанавливает переменную PYTHONPATH в значение cwd.
Есть мысли?

Подробнее здесь: https://stackoverflow.com/questions/786 ... on-package

Вернуться в «Python»