Проект Pycharm неправильно импортирует модули

У меня есть репозиторий с веб-приложением Flask и отдельным каталогом python, и я использую PyCharm.

Каталог моего проекта:

/backup/
    __init__.py
    python modules etc
/webapp
    /py
        __init__.py
        /lib
            __init__.py
            python code
        /src
            __init__.py
            python code
    /static
        js, css, fonts etc
    /templates
        html
    webapp.py

Я пытаюсь импортировать модуль в webapp.py. Этот модуль находится в webapp/py/src/blah.py. blah.py имеет класс под названием Blah. Я пытаюсь написать blah = Blah() перед импортом модуля. Я хочу, чтобы pycharm импортировал его, когда я нажимаю option + return. Когда я пытаюсь импортировать через pycharm, он импортирует его так:

from webapp.py.src.blah import Blah

Это не работает, поскольку webapp не является пакетом Python. Когда я меняю его на

from py.src.blah import Blah

оно работает. Есть ли способ заставить его импортировать правильно? Я полагаю, что раньше это работало. Затем член группы решил, что почти каждому каталогу нужен __init__.py, и я думаю, что это, возможно, испортило pycharm. Я пробовал сбрасывать кеш, но это не работает. Любые решения?


person superJustin    schedule 29.01.2015    source источник
comment
Поскольку PyCharm — коммерческий продукт, а Jetbrains платит людям за ответы на вопросы, пробовали ли вы их официальные каналы поддержки? Просто спрашиваю, я думаю, что их обслуживание клиентов очень хорошее.   -  person Paulo Scardine    schedule 29.01.2015
comment
Спасибо, Пауло. На самом деле у меня есть студенческая лицензия, поэтому я не думал об этом. Попробую.   -  person superJustin    schedule 29.01.2015
comment
Я не говорю, что это сработает, но вы можете попробовать пометить/снять пометку с определенных каталогов в качестве источника в параметрах проекта.   -  person gg349    schedule 29.01.2015
comment
Спасибо gg, я пробовал это без везения ..   -  person superJustin    schedule 29.01.2015


Ответы (1)


Каталог webapp, как показано, не является пакетом Python. Он не содержит файла __init__.py, поэтому его нельзя включить в путь импорта. Похоже, вы настроили свой путь Python так, чтобы каталог webapp находился на пути, поэтому пакеты под ним можно импортировать (каталог py).

Так что проблема в том, как вы структурировали свой проект, а не в PyCharm. Пример «правильного» способа структурирования приложения Flask и связанных с ним данных см. в исходном коде веб-сайта чата Python: https://github.com/sopython/sopython-site.

По сути, вам нужно запускать из каталога, который должен быть на вашем пути, каждый из пакетов должен находиться в этом каталоге (и должны быть пакеты с __init__.py). Ни myapp, ни backup не должны находиться на пути Python, только project.

/project
    /run.py
    /myappp
        __init__.py
    /backup
        __init__.py
person davidism    schedule 29.01.2015