#python #python-3.x #python-2.7
#python #python-3.x #python-2.7
Вопрос:
Структура каталогов:
.
├── classification
│ ├── lstm_repres.py
│ ├── lstm_test.py
│ ├── lstm_train.py
│ ├── lstm_utils.py
│ ├── lstm_utils.pyc
│ └── svm_run.py
├── utils
│ ├── data_splits.py
│ ├── evaluation.py
│ ├── load_data.py
│ ├── NLTKPreprocessor.py
│ ├── resources.py
│ ├── TfIdf.py
│ └── vector_utils.py
в lstm_train.py
:
from classification.lstm_utils import *
когда я пытаюсь запустить оба python2 lstm_train.py
или python3 lstm_train.py
, я получаю:
Traceback (most recent call last):
File "classification/lstm_train.py", line 7, in <module>
from classification.lstm_utils import *
ModuleNotFoundError: No module named 'classification'
То же самое происходит в строке
from utils.data_splits import get_train, get_val
В чем проблема? Почему формат from <dir>.<script> import *
, похоже, здесь не работает?
Редактировать
Как было предложено @deathangel908, я добавил __init__.py
пустые файлы в оба каталога, но ошибка сохраняется.
Ответ №1:
-
Чтобы пометить каталог как пакет, который вы хотите импортировать, в нем должно быть как минимум пусто
__init__.py
в этом каталоге. Поэтому добавьте__init__.py
файлы вclassification
utils
каталоги и. -
Для импорта пакета с абсолютным путем вам необходимо запустить интерпретатор python из корневого пакета в качестве модуля:
python3 -m "classification.lstm_train"
Комментарии:
1. сделал это с
touch __init__.py
помощью, но я все равно получаю ту же ошибку. Должен ли я вызыватьpython2 classification/lstm_train.py
или вызывать из одного и того же каталога?2. Либо используйте относительный путь, либо настройте общедоступный
3. Пожалуйста, ознакомьтесь с моими изменениями и обновите свой вопрос относительным или общедоступным путем. Как вы это описываете, это не сработает.
4. попытка запуска из корневого каталога с
python2/3 classification/lstm_train.py
выдает ту же ошибку, а добавление..
перед строкой импорта и вызов изнутриclassification
каталога дают:from ..classification.lstm_utils import * ValueError: attempted relative import beyond top-level package