Как pip install —editable изменяет путь к python, когда я запускаю скрипты в папках внутри корня проекта?

#python #python-3.x #pip

#python #python-3.x #pip

Вопрос:

У меня есть проект, созданный с помощью FastApi. Проект имеет такую структуру (упрощенную):

 myproject/
    src/
        app/
            db/
            endpoints/
            schemas/
            __init__.py
            config.py
            main.py
        migrations/
        tests/
        venv/
        requirements.txt
        requirements.dev.txt
        setup.py
    dockerfile
    README.md
  

Я устанавливаю проект, используя виртуальную среду:

 cd src
python -m venv ./venv
pip install -r requirements.txt -r requirements.dev.txt
  

Когда я запускаю python app/main.py из src/ , возникает исключение:

Ошибка ModuleNotFoundError: нет модуля с именем ‘app’

Исследуя с помощью git, я обнаружил, что в старой версии я использовал для установки зависимостей другие инструкции:

 cd src
python -m venv ./venv
pip install -e . -r requirememts.dev.txt
  

Я скопировал установку pip с помощью -e , и она снова заработала. Также я добавил строки в main.py :

 import sys
print(sys.path)
  

и обнаружил, что результаты разные, вот результаты:

с pip install -r <...>

 > python app/main.py
['D:\Projects\myproject\src\app',
 'D:\Projects\myproject\src\venv',
 'D:\Projects\myproject\src\venv\lib\site-packages', .....]
Traceback (most recent call last):
  File "app/main.py", line 7, in <module>
    from app.config import settings
ModuleNotFoundError: No module named 'app'
  

с pip install -e <...>

 > python app/main.py
['D:\Projects\myproject\src\app',
 'D:\Projects\myproject\src\venv',
 'D:\Projects\myproject\src\venv\lib\site-packages',
 'd:\projects\myproject\src', ....]
<... Fast api amp; uvicorn logs here>
  

Почему это происходит?