перейдите в родительский каталог etc и data_load и введите
python -m etc.test
. Это должно сработать.
Здесь небольшой тестовый пример (при условии, что вы работаете на машине с Linux)
## create the test case
mkdir -p import_issue/data_load import_issue/etc
touch import_issue/data_load/__init__.py import_issue/etc/__init__.py
echo 'print("I am", __name__)' > import_issue/etc/test.py
echo 'from data_load.rand_data import RandData' >> import_issue/etc/test.py
echo 'print("Randdata = ", RandData)' >> import_issue/etc/test.py
echo "class RandData:" > import_issue/data_load/rand_data.py
echo ' pass' >> import_issue/data_load/rand_data.py
#
# now perform the test
cd import_issue
python -m etc.test
Причина, по которой вещи в вашем первоначальном примере не сработали должным образом, заключается в том, что вы представляете рабочую директорию, вероятно, etc
, и если вы загружаете скрипт на python в etc, он пытаетсяимпортировать load_data относительно текущего рабочего каталога (etc
) и ниже etc
нет каталога с именем rand_data
, в котором есть файл __init__.py
.
Мое предложение исправить это пойтидо общего родительского каталога (теперь это будет ваш текущий рабочий каталог) и импортируйте etc / test в качестве модуля. Причина в том, что test.py находится в каталоге и т. Д. С init .py, поэтому вы должны импортировать его как и т. Д., А не вызывать его напрямую. Вызывать файл, который является модулем напрямую из etc / test.py, не рекомендуется и может спровоцировать некоторые редкие запутанные ситуации.