【问题标题】:Import error in IPython notebook only with coopr.pyomo仅使用 coopr.pyomo 在 IPython 笔记本中导入错误
【发布时间】:2013-07-15 11:43:04
【问题描述】:

我在两个脚本文件中都成功地使用了mathematical modelling packagecoopr.pyomo,并在 ipython 控制台上进行了交互。但是,如果我在由ipython notebook 启动的 IPython 笔记本中尝试简单的import coopr.pyomo,我会收到以下错误消息:

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

ImportError: No module named pyomo

其他导入(buitlins 和自定义包)可以毫无问题地工作。有什么想法可以在哪里寻找原因?

环境:Windows 7 上的 Python 2.7(32 位),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 安装程序工作方式的特殊方式引起的。根据Installation Notes,Coopr 被封装在自己的虚拟沙箱中。其默认安装目录建议 CH := C:/Packages/Coopr 强调了这一点。上次,我忽略了这个标志,只是将它安装到 Python 的 site-packages 文件夹中。现在,为了测试,我将 Coopr 重新安装到了这个外部目录。 Coopr/Pyomo 仍然可以从 (I)Python 会话中成功导入,因为 sys.pathCH/src/ 目录的所有子目录扩展。

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

【问题讨论】:

  • 你是如何安装这个包的?您的最后一段描述它就像是从源代码直接复制到 site-packages 目录,而不是通过运行 python setup.py install
  • 使用官方installer。我重新检查了程序,有关详细信息,请参阅编辑#2。

标签: python python-2.7 ipython-notebook


【解决方案1】:

我不得不猜测,但是:

在笔记本中尝试以下操作:

import coopr
print coopr.__file__

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

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

【讨论】:

  • 感谢您的猜测!这种情况非常令人沮丧.. coopr.__file__ 不存在,但我在我的问题中添加了coopr.__dict__ 的内容以及我的目录结构上的一些内容。还有什么想法吗?
【解决方案2】:

感谢@Evert 为我指明了正确的方向。这个问题是由我(粗心)将 Coopr 安装到我的 Python 安装的 site-packages 目录中引起的。自我提醒:不要那样做。虽然 IPython 自己设法找到了包,但 IPython 笔记本的搜索路径变得混乱,并将 coopr 目录视为任何其他包文件夹。

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

【讨论】:

  • 很高兴它成功了。我想自己快速查看一下安装,但在注册和非源安装程序上退缩了。听起来他们使用了复杂的设置和安装。不是我最喜欢的。希望它继续为你工作;-)。
  • 确实如此。我认为基于 pip 的安装原则上可以工作,但我避免在 Windows 下设置构建环境。
猜你喜欢
  • 2015-05-12
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 2015-05-23
  • 2014-04-13
  • 2016-09-25
相关资源
最近更新 更多