我在脚本文件和 ipython 控制台上以交互方式成功使用了数学建模包。 但是,如果我在以 开头的 IPython 笔记本中coopr.pyomo
尝试简单的操作,则会收到以下错误消息:import coopr.pyomo
ipython notebook
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 安装程序的工作方式的特殊方式引起的。根据安装说明,Coopr 封装在自己的虚拟沙箱中。其默认安装目录建议CH :=强调了这一点C:/Packages/Coopr
。上次,我忽略了这个标志,只是将它安装到 Python 的site-packages
文件夹中。现在,为了测试,我将 Coopr 重新安装到了这个外部目录。Coopr/Pyomo 仍然可以从 (I)Python 会话中成功导入,正如CHsys.path
目录的所有子目录所扩展的那样。/src/
但是,这些子目录看起来与我习惯的其他包不同。例如, src/coopr.pyomo 仅包含一个 setup.py,而__init__.py
位于CH/src/coopr.pyomo/coopr/pyomo
中。虽然 IPython 似乎能够找到这些包,但 IPython 笔记本——尽管搜索路径相同——似乎对包的组织方式感到困惑。