Как должен быть настроен путь для проекта python?

#python #import #importerror

#python #импорт #importerror

Вопрос:

После исчерпывающих исследований по этой теме за последние несколько дней я все еще не понимаю, как правильно обрабатывать путь python для конкретного проекта. Ниже я описываю ситуацию, в которой я нахожусь, и точный вопрос, который у меня есть по этому поводу.

Постановка проблемы

Я загрузил проект, над которым хочу работать, с GitHub. Ниже представлена абстрактная структура проекта, из которой удалены ненужные компоненты:

 project
|-- experiments
|   |-- cnn_experiments
|       |-- __init__.py
|       |-- train.py
|       |-- datasets
|           |-- __init__.py
|           |-- module_A.py
|-- src
    |-- cnn
        |-- io
            |-- __init__.py
            |-- module_B.py
  

Примечание: из приведенной выше структуры отсутствуют только некоторые каталоги в каталоге cnn с некоторыми дополнительными функциями. За исключением этого, структура такая же, как я загрузил ее с GitHub.

В train.py нем есть следующее import утверждение:

 from cnn_experiments.datasets.module_A import Class_A
  

Из каталога cnn_experiments я запускаю python train.py command и получаю эту ошибку:

Ошибка импорта: нет модуля с именем cnn_experiments.datasets.module_A

Аналогично, я получаю соответствующую ошибку при запуске module_A.py , в которой есть import оператор:

 from cnn.io.module_B import Class_B
  

Особенно для второго случая, когда путь совершенно другой, когда я использую print(sys.path) изнутри train.py , я могу сказать, что Python не может решить, на что import ссылается my, но проблема в том, почему.

Вопрос

  • В этом случае, когда проект небольшой, как я могу получить полный доступ для импорта всех каталогов? Я наткнулся на некоторые ответы, которые относятся к изменению PYTHONPATH в файле .bashrc. Но для меня не имеет смысла настраивать .bashrc, экспортируя в него путь для каждого проекта.
  • Поскольку я понимаю, что полный доступ из каждого модуля к любому другому модулю в проекте обычно нежелателен ради абстрактности и независимости, как я могу настроить путь так, чтобы импортируемые модули были видны?

Заранее спасибо за любую помощь!


РЕДАКТИРОВАТЬ: я забыл упомянуть, что я использую Python 2.7 в Ubuntu 18.04 LTS.

Комментарии:

1. «Правильный» способ обработки таких вещей заключается в том, чтобы проект можно было установить, например, через setup.py или pyproject.toml . Все остальное — обходной путь.

2. ОК. Итак setup.py , файл необходим для автоматического построения всех зависимостей, верно? Но теперь, поскольку, например, этот проект, над которым я работаю, не поставляется с setup.py файлом, есть ли какой-нибудь трюк , чтобы иметь доступ ко всем каталогам?

3. Нет, если вы одновременно запрашиваете правильный путь, без PYTHONPATH и без setup.py .

4. Меня интересуют две вещи: 1) Я хочу знать, как правильно обращаться с проектом python, чтобы его можно было легко использовать другими и т. Д. (На что вы уже ответили мне) И 2) есть ли какой-то трюк на данный момент, поскольку проект не мой, и япросто хочу выяснить , как это работает.