Невозможно импортировать модуль из исходного каталога в pycharm - PullRequest
1 голос
/ 22 мая 2019

Этот вопрос задавался ранее - но я не мог решить его ни с одним из ответов.Я установил папку проекта в pycharm ( примечание , что папка проекта не находится в каталоге ../PycharmProject/....

Моя структура супер базовая:

project_title (folder)
             |--src (folder)
                  |-- app.py  
                  |-- pipeline_tools (folder)
                     |-- helpers.py
                     |-- other modules

Iперепробовал все возможные решения и комбинации, но когда в app.py я пытаюсь импортировать функцию из любого из модулей, в tools я получаю ошибки.

Кроме того, Pycharm подчеркивает красным следующее утверждение:

1) from pipeline_tools.helpers import a_certain_function (красное подчеркивание с «неразрешенной ссылкой»)

Но следующее не дает мне красного:

2) from .pipeline_tools.helpers import a_certain_function (без красного подчеркивания, обратите внимание на относительный импорт)

Тот факт, что у меня есть или нет __init__.py внутри модулей, ничего не меняет - я все еще получаю следующие две ошибки:

For 1)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/gabriele/pycharm-2019.1.1/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named 'pipeline_tools'

для2)

Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/home/gabriele/pycharm-2019.1.1/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
ModuleNotFoundError: No module named '__main__.pipeline_tools'; '__main__' is not a package

Вещи, которые я попробовал:

1) Перейдите к settings > Project Structure, проверьте content root, это .../project_title и отметили его как «источник» - оно синее.

2) Добавьте __init__.py в папку pipeline_tools и в папку /src, перепробовал все возможные комбинации.

3) Используйте приведенный ниже код, чтобы проверить, что путь к папке проекта является частью строки пути - это в конце

import sys
print(sys.path)

4) Использованиеприведенный ниже код для перемещения пути проекта к началу sys.path: sys.path.insert(0,'path/to/project_title')

5) Просто попытался напечатать PYTHONPATH следующим образом:

os.environ['PYTHONPATH'].split(os.pathsep)

и каталога моего проекта нет в нем

Сейчас я немного растерялся.Понятия не имею, что происходит.

1 Ответ

0 голосов
/ 22 мая 2019

По какой-то чертовой причине я не понимаю, как установить каталог src в качестве моего источника sources root вместо каталога project_title (который в любом случае содержит его ... но что я знаю).

Итак, решение было:

-> настройки -> структура проекта -> удалить предыдущий корневой каталог содержимого и сделать источник содержимого каталогом src

импортировать так:

from pipeline_tools.helpers import func_1, func_2

Примечание: что у меня нет файла __init__.py в моей папке, так как я считаю, что я прочитал, что они больше не нужны.

До Python 3.3 каталоги файловой системы и каталоги в zipfiles должны были содержать init .py, чтобы быть распознанными как каталоги пакетов Python. Даже если при импорте пакета нет кода инициализации, который требуется выполнить, для интерпретатора будет необходим пустой файл init .py, чтобы найти любые модули или подпакеты в этом каталоге.

Это изменилось в Python 3.3: теперь любой каталог в sys.path с именем, совпадающим с именем искомого пакета, будет распознаваться как вспомогательные модули и подпакеты для этого пакета.

С Python Notes от Ника Коглана

...