仅使用coopr.pyomo在IPython笔记本中导入错误

时间:2013-07-15 11:43:05

标签: python python-2.7 ipython-notebook

我在两个脚本文件中成功使用mathematical modelling package coopr.pyomo,并在ipython控制台上以交互方式使用Installation Notes import coopr.pyomo。但是,如果我在ipython notebook启动的IPython笔记本中尝试一个简单的ImportError Traceback (most recent call last) <ipython-input-1-ff8219fceacd> in <module>() ----> 1 import coopr.pyomo ImportError: No module named pyomo ,我会收到以下错误消息:

__file__

其他导入(buitlins和自定义包)都可以顺利运行。任何寻找原因的想法?

环境:Windows 7上的Python 2.7(32位),IPython 0.13.2,Coopr版本3.2.6148。

编辑:更多诊断

实际上,coopr可以导入,但没有__dict__属性。如果我显示{'__name__': 'coopr', 'data': <module 'coopr.data' (built-in)>, '__doc__': None, '__path__': ['C:\\Python27\\lib\\site-packages\\coopr']} ,我会得到正确的路径:

src

如果我在该目录中浏览,我发现所有子模块(例如coopr.pyomo)都位于data子目录中。 C:/Packages/Coopr似乎是一个虚假的目录,包含一些测试(test_baselines.py,test_perf.py)和示例(diet1.py)文件。

编辑#2:它越来越近(我认为)

这个问题似乎是由Coopr的Windows安装程序如何工作的特殊方式引起的。根据{{​​3}},Coopr封装在自己的虚拟沙箱中。其默认安装目录建议 CH := site-packages强调了这一点。上次,我忽略了这个标志,只是将它安装到Python的sys.path文件夹中。现在,为了测试,我将Coopr重新安装到这个外部目录。 Coopr / Pyomo仍然可以在(I)Python会话中成功导入,因为/src/ CH __init__.py目录的所有子目录扩展。

但是,这些子目录看起来与我习惯的其他包不同。例如,src / coopr.pyomo只包含setup.py,而/src/coopr.pyomo/coopr/pyomo位于 CH {{1}}。虽然IPython似乎能够找到软件包,但IPython笔记本 - 尽管搜索路径相同 - 似乎对软件包的组织方式感到困惑。

2 个答案:

答案 0 :(得分:1)

我必须猜测,但是:

在笔记本中尝试以下内容:

import coopr
print coopr.__file__

看起来您正在选择与已安装的模块不同的coopr模块,__file__属性应该告诉您正在使用哪个模块。也许有一个名为coopr的脚本;这样的脚本不包含子模块pyomo

为什么这只发生在IPython笔记本中,而不是在IPython控制台中?我的猜测是,如果确实存在不同的coopr模块,它将存在于您的主目录或IPython笔记本用作其“基础”的系统上的其他位置。 IPython控制台基本目录是您启动它的地方,但IPython笔记本可能已经解耦并且具有默认的基本目录。我不知道笔记本是如何在Windows下运行的,所以我不能告诉你默认是什么以及在哪里看,但上面的代码可以很好地告诉你。

答案 1 :(得分:0)

感谢@Evert指出我正确的方向。这个问题是由我(粗心)将Coopr安装到我的Python安装的site-packages目录中引起的。自我注意:不要那样做。虽然IPython本身设法找到了包,但IPython笔记本的搜索路径却被混淆了,并且像其他任何包文件夹一样对待coopr目录。

将Coopr重新安装到其建议位置在我的Python安装目录之外,从site-packages删除coopr目录,然后重新启动,一切正常。