Что меня удивило, так это то, что это сработало при использовании 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
Код: Выделить всё
user@host:/home/user/stackoverflow_mwe/$ fastapi dev fastapi/fastapi_mwe.py
ModuleNotFoundError: No module named `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'])
Есть мысли?
Подробнее здесь: https://stackoverflow.com/questions/786 ... on-package