#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) есть ли какой-то трюк на данный момент, поскольку проект не мой, и япросто хочу выяснить , как это работает.