Python не может найти модуль с именем / ошибка импорта из двухуровневой глубокой папки

#python #python-2.7 #python-import

#python #python-2.7 #python-импорт

Вопрос:

Я немного запутался в этом. Я не знаю, почему он не находит rpSubmit py. Это поведение не является особенным для этого single .py, а является общей проблемой. Я использую python2.7, и даже разные установки python сталкиваются с одной и той же проблемой.

Этот код взят из menu.py это вызывает ошибку импорта: Ошибка импорта: нет модуля с именем rpSubmit:

 from scripts.rpSubmit import rpSubmit
  

Вот структура папок, и поскольку все __init__.py необходимые существуют, верно?:

     Verzeichnis: Z:ZMM0_pipelinepipelinenukemaster


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
d----        17.03.2019     19:00            gizmos                                                                    
d----        18.03.2019     14:32            scripts                                                                   
d----        17.03.2019     19:00            ToolSets                                                                  
-a---        18.03.2019     14:35        656 init.py                                                                   
-a---        18.03.2019     14:32        740 menu.py                                                                                                                                                                                     


    Verzeichnis: Z:ZMM0_pipelinepipelinenukemasterscripts


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
d----        18.03.2019     14:32            rpSubmit                                                                  
-a---        18.03.2019     14:32          0 __init__.py                                                                                                                         


    Verzeichnis: Z:ZMM0_pipelinepipelinenukemasterscriptsrpSubmit


Mode                LastWriteTime     Length Name                                                                      
----                -------------     ------ ----                                                                      
-a---        10.03.2010     01:52       3620 rpSubmit.png                                                              
-a---        18.01.2018     16:15       7591 rpSubmit.py                                                               
-a---        18.03.2019     14:32          0 __init__.py                                                                                                                            
-a---        18.03.2019     14:32       5638 rpSubmit.pyc    
  

РЕДАКТИРОВАТЬ: После того, как я переименовал папку в script (без ов), она снова заработала. Я понятия не имею, почему. Счастливая случайность.

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

1. from scripts import rpSumbit Работает?

2. Нет, он возвращается с ImportError: не удается импортировать имя rpSubmit

3. Просто для двойной проверки: вы установили модуль? Вы пытаетесь импортировать, находясь в главной папке (в командной оболочке)?

4. Строка из scripts.rpSubmit import rpSubmit находится внутри menu.py который находится внутри главной папки. Устанавливать нечего, поскольку я хочу импортировать всего лишь файл .py. Может быть, package было бы лучшим словом вместо module?

5.хорошо, у меня были похожие ошибки, и я почти потерял его, пытаясь выяснить, что именно не так с моими импортами, теперь я даже не беспокоюсь, просто используйте этот шаблон, и все готово, просто скопируйте этот код поверх всех ваших импортов: import os current_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) parent_dir = os.path.dirname(current_dir) sys.path.insert(0, parent_dir) Скажите мне, устраняет ли это вашу проблему

Ответ №1:

Если вы запускаете программу из папки, которая не является ‘master’, Python, скорее всего, не находит rpSubmit, потому что он ищет папку ‘scripts’ в этой папке (где вы запустили программу), а не в папке ‘master’.

Чтобы исправить это, измените from scripts.rpSubmit import rpSubmit строку в menu.py для:

 import imp
rpSubmit = imp.load_source('rpSubmit', r'Z:ZMM0_pipelinepipelinenukemasterscriptsrpSubmitrpSubmit.py')
  

Таким образом, вы задаете абсолютный путь к нужному скрипту.