2016-02-09 3 views
1

Давайте предположим, что структура файла (упрощенный) выглядит следующим образом:Python импорт не удается (в Слерме среде)

> some_script.py 
> +extra_directory/ 
> ++ __init__.py 
> ++ extra_script.py 

В моем питоне файл some_script.py У меня есть импорт, который выглядит следующим образом:

from extra_directory.extra_script import extra_class 

Это нормально работает на моем рабочем столе.

Однако, когда я запускаю это на кластере в Slurm среде я всегда получаю эту ошибку:

Traceback (most recent call last): File "/work/var/slurmd/state.node253.d/job17281/slurm_script", line 2, in from distributions.convert_to_distribution import DistributionConverter as DC ImportError: No module named distributions.convert_to_distribution

Если материал распределения является реальным именем extra_directory примера.

Любые идеи?

EDIT:

Чтобы прояснить мою ситуацию: я на самом деле есть __init__.py скрипты в каждом каталоге (просто забудьте упомянуть об этом здесь). Тем не менее, импорт по-прежнему не удается.

Моего текущего обходным путем является добавление абсолютного пути в моих сценариях:

sys.path.append("/absolute/path/to/extra_directory") 
+0

вы уверены ваш скрипт запускается в каталоге вы предполагаете, что начинается? Как выглядит заголовок сценария? – damienfrancois

ответ

0

Вам нужно создать пустой файл __init__.py внутри extra_directory так, что Python будет рассматривать extra_directory как пакет Python.

По Modules - Python Documentation:

The init.py files are required to make Python treat the directories as containing packages; this is done to prevent directories with a common name, such as string, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case, init.py can just be an empty file, but it can also execute initialization code for the package or set the all variable, described later.

структура Файл должен быть таким:

> some_script.py 
> extra_directory/ 
>  __init__.py 
>  extra_script.py 

Там должен быть класс с именем extra_class внутри extra_script.py.

class extra_script(object): 
    pass 

Затем вы можете импортировать его успешно из some_script.py:

from extra_directory.extra_script import extra_class 
+0

Спасибо за ваш ответ! Я думаю, кто-то всегда забывает '__init __. Py'. Тем не менее, у меня есть init в каждом каталоге, но импорт все же не работает. В настоящий момент моим обходным путем является включение абсолютного пути в мой дополнительный каталог: 'sys.path.append ("/absolute/path/to/extra_directory ")' – daniel451

 Смежные вопросы

  • Нет связанных вопросов^_^