Ошибка импорта в блокнот IPython только с coopr.pyomo

Я успешно использую пакет математического моделирования coopr.pyomo как в файлах сценариев, так и в интерактивном режиме на ipython-консоль. Однако, если я попытаюсь выполнить простой import coopr.pyomo в блокноте IPython, запущенном ipython notebook, я получу следующее сообщение об ошибке:

ImportError                               Traceback (most recent call last)
<ipython-input-1-ff8219fceacd> in <module>()
----> 1 import coopr.pyomo

ImportError: No module named pyomo

Другие импорты (как встроенные, так и пользовательские пакеты) работают без проблем. Есть идеи, где искать причину?

Среда: Python 2.7 (32-разрядная версия) в Windows 7, IPython 0.13.2, выпуск Coopr 3.2.6148.

Изменить: больше диагностики

Действительно, coopr можно импортировать, но он не имеет атрибута __file__. Если я покажу __dict__, я получу правильный путь:

{'__name__': 'coopr', 
 'data': <module 'coopr.data' (built-in)>, 
 '__doc__': None, 
 '__path__': ['C:\\Python27\\lib\\site-packages\\coopr']}

Если я просмотрю этот каталог, я обнаружу, что все подмодули (например, coopr.pyomo) расположены в подкаталоге src. data кажется поддельным каталогом с некоторыми тестовыми (test_baselines.py, test_perf.py) и примерами (diet1.py) файлами.

Правка № 2: это становится ближе (я думаю)

Проблема, по-видимому, вызвана своеобразным способом работы установщика Coopr для Windows. Согласно примечаниям по установке, Coopr находится в собственной виртуальной песочнице. Это подчеркивается предлагаемым по умолчанию каталогом установки CH := C:/Packages/Coopr. В прошлый раз я проигнорировал этот знак и просто установил его в папку Python site-packages. Теперь для тестирования я переустановил Coopr в этот внешний каталог. Coopr/Pyomo по-прежнему можно успешно импортировать из сеанса (I)Python, поскольку sys.path расширяется всеми подкаталогами каталога CH/src/.

Однако эти подкаталоги выглядят иначе, чем другие пакеты, к которым я привык. Например, src/coopr.pyomo содержит только setup.py, а __init__.py находится в CH/src/coopr.pyomo/coopr/pyomo. В то время как IPython, кажется, может найти пакеты, IPython Notebook — хотя путь поиска идентичен — кажется, запутался в том, как организованы пакеты.


person ojdo    schedule 15.07.2013    source источник
comment
Как вы установили пакет? Ваш последний абзац описывает его так, как будто он был скопирован из исходного кода прямо в каталог site-packages, а не путем запуска python setup.py install.   -  person    schedule 16.07.2013
comment
С помощью официального установщика. Я повторно изучил процедуру, подробности см. в Редактировании № 2.   -  person ojdo    schedule 16.07.2013


Ответы (2)


Я должен догадаться, но:

Попробуйте что-то вроде следующего в записной книжке:

import coopr
print coopr.__file__

Похоже, вы подбираете модуль coopr, отличный от установленного, и атрибут __file__ должен сказать вам, какой из них вы используете. Возможно, есть сценарий под названием coopr; такой скрипт не будет содержать подмодуль pyomo.

Почему это происходит только в блокноте IPython, а не в консоли IPython? Я предполагаю, что если действительно существует другой модуль coopr, он находится в вашем домашнем каталоге или где-то еще в системе, которую блокнот IPython использует в качестве своей «базы». Базовый каталог консоли IPython находится там, где вы его запустили, но записная книжка IPython, вероятно, не связана и имеет базовый каталог по умолчанию. Я не знаю, как записная книжка работает под Windows, поэтому я не могу сказать вам, что такое по умолчанию и где искать, но приведенный выше код вполне может вам это показать.

person Community    schedule 15.07.2013
comment
Спасибо за предположение! Эта ситуация довольно расстраивает. coopr.__file__ не существует, но я добавил содержимое coopr.__dict__ к моему вопросу, а также некоторые биты в моей структуре каталогов. Есть еще идеи? - person ojdo; 15.07.2013

Спасибо @Evert за то, что указали мне правильное направление. Проблема была вызвана моей (неосторожной) установкой Coopr в каталог site-packages моей установки Python. Примечание для себя: не делайте этого. В то время как самому IPython удалось найти пакеты, путь поиска записной книжки IPython запутался и обработал каталог coopr как любую другую папку пакета.

После повторной установки Coopr в предложенное место за пределами моего каталога установки Python, удаления каталога coopr из site-packages с последующей перезагрузкой все работает нормально.

person ojdo    schedule 16.07.2013
comment
Рад, что это сработало. Я хотел сам быстро взглянуть на установку, но отказался от регистрации и установщика без исходного кода. Похоже, они используют запутанную настройку и установку; не мой любимый. Надеюсь, он и дальше будет работать на вас ;-). - person ; 16.07.2013
comment
Конечно. Я думаю, что установка на основе pip в принципе может работать, но я воздержусь от настройки среды сборки под Windows. - person ojdo; 16.07.2013