Путь поиска модуля не исправлен путем добавления __init__.py и редактирования PYTHONPATH

У меня проблема, очень похожая на эту. Я тоже работаю с Programming Python 4th edition. Я использую Mac powerbook. У меня есть структура каталогов, похожая на:

programming\ python
├── PP4E
│   ├── GUI
│   │   ├── Tour
│   │   │   ├── __init__.py
│   │   │   ├── demoAll-prg.py
│   │   │   ├── demoAll-win.py
│   │   │   ├── demoCheck.py
│   │   │   ├── demoDlg.py
│   │   │   ├── demoRadio.py
│   │   │   ├── demoScale.py
│   │   ├── __init__.py
│   ├── __init__.py
│   └── launchmodes.py
└── __init__.py

demoAll-prg.py пытается выполнить from PP4E.launchmodes import PortableLauncher, но возвращает ImportError: No module named 'PP4E'.

Ответы на SO обычно говорят о том, чтобы убедиться, что в папках присутствуют файлы __init__.py (сделано!), и/или добавить родительский каталог (здесь «программирование python») в PYTHONPATH. Это также согласуется с Learning Python, 5th ed., p. 709.

Я попробовал несколько разных способов редактирования моего пути к Python, например описанный здесь безрезультатно. В настоящее время мой .bash_profile добавлен в конец:

PYTHONPATH=“/Users/geoffreysametz/google drive/programming python”
export PYTHONPATH

но это не решение проблемы. Я закрыл и снова открыл терминал и перезагрузил компьютер.

Любые советы о том, как решить эту проблему, очень ценятся.


person Geoffrey Sametz    schedule 18.04.2016    source источник


Ответы (1)


Если вы указываете путь python с помощью bash, перед любым пробелом должен стоять \.

PYTHONPATH=“/Users/geoffreysametz/google\ drive/programming\ python”
person Hun    schedule 18.04.2016
comment
Это исправляет $PYTHONPATH, но не ошибку. echo $PYTHONPATH возвращает “/Users/geoffreysametz/google drive/programming python”, но python demoAll-prg.py запуск в каталоге тура возвращает ImportError: No module named 'PP4E' - person Geoffrey Sametz; 18.04.2016
comment
Перед любым оператором импорта в demoAll-prg.py попробуйте это. система импорта; печать (системный путь); и посмотрите, действительно ли это включает путь. - person Hun; 18.04.2016
comment
Это показывает странную ошибку. Первый путь — '/Users/geoffreysametz/Google Drive/Programming Python/PP4E/GUI/Tour' (предположительно, отсюда запускается программа по пути b/c), а второй — '/Users/geoffreysametz/Google Drive/Programming Python/PP4E/GUI/Tour/“/Users/geoffreysametz/Google Drive/Programming Python”', где путь .bash_profile (заключенный в двойные кавычки) перемешан с копией предыдущего пути. - person Geoffrey Sametz; 18.04.2016
comment
В вашем исходном описании все пути указаны в нижнем регистре. Но в операторе печати некоторые из них в верхнем регистре. - person Hun; 18.04.2016
comment
Извините, я должен был добавить, что я изменил регистр, используемый в .bash_profile, чтобы он соответствовал реальным именам файлов после первоначального сообщения, поскольку чувствительность к регистру могла быть проблемой. Приведенные выше пути являются прямым вырезанием и вставкой реального текущего вывода. - person Geoffrey Sametz; 18.04.2016