2013-07-15 2 views
0

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

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

ImportError: No module named pyomo 

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

Окружающая среда: Python 2.7 (32 бит) для Windows 7, IPython 0.13.2, выпуск Coopr 3.2.6148.

Edit: больше диагностического

Действительно, 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) файлами.

Edit # 2: она становится все ближе (я думаю)

Проблема, кажется, вызвана особым образом как работает окна инсталлятор Coopr. Согласно Installation Notes, 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-ноутбук, хотя путь поиска идентичен, кажется, путается тем, как организованы пакеты.

+0

Как вы установили пакет? Ваш последний абзац описывает его, как будто он был скопирован из источника прямо в каталог 'site-packages', а не запущен' python setup.py install'. – Evert

+0

Использование официального [установщика] (https://software.sandia.gov/trac/coopr/downloader/download/file/52). Я пересмотрел процедуру, см. Редактировать №2 для получения дополнительной информации. – ojdo

ответ

0

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

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

+0

Рад, что это сработало. Я хотел бы быстро взглянуть на установку самостоятельно, но отступил от регистратора и не-источника установки. Звучит, они используют запутанную установку и установку; не мой любимый. Надеюсь, он будет работать для вас ;-). – Evert

+0

Действительно. Я думаю, что установка на основе протокола может работать в принципе, но я воздержусь от создания среды сборки под Windows. – ojdo

1

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

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

import coopr 
print coopr.__file__ 

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

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

+0

Спасибо, что угадали! Эта ситуация довольно расстраивает .. 'coopr .__ file__' не существует, но я добавил содержимое' coopr .__ dict__' к моему вопросу плюс некоторые биты в моей структуре каталогов. Есть еще идеи? – ojdo

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