【发布时间】: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.path 由 CH/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