1

我在 Windows 上使用 JModelica 2.1,直到最近我总是能够毫无问题地导入 pyjmi。例如,在 IPython 控制台中,我经常会毫无问题地运行以下命令:

cd C:\mydirectory
from pyjmi import *

然而,最近,我不小心打开了一个新的 IPython 控制台并运行了之前的代码段,却没有意识到我已经打开了一个运行优化问题的控制台。从那时起,前面的代码就会抛出以下错误:

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-2-ecb3494d14c4> in <module>()
----> 1 from pyjmi import *

C:\JModelica.org-2.1\install\Python\pyjmi\symbolic_elimination.py in <module>()
     21 import scipy
     22 import casadi
---> 23 import modelicacasadi_wrapper as ci
     24 import itertools
     25 from collections import OrderedDict

C:\JModelica.org-2.1\install\Python\modelicacasadi_wrapper\__init__.py in <module>()
----> 1 from modelicacasadi_wrapper import *

C:\JModelica.org-2.1\install\Python\modelicacasadi_wrapper\modelicacasadi_wrapper.py in <module>()
    155 SwigPyIterator_swigregister(SwigPyIterator)
    156
--> 157 import casadi.casadi_core
    158 class Printable(_object):
    159     """Proxy of C++ ModelicaCasADi::Printable class."""

ImportError: No module named casadi_core

奇怪的是,上述错误仅在我更改当前目录时发生。相反,如果我不这样做cd并留在默认目录 (C:\Users\Public\Documents\JModelica.org) 中,那么它会毫无问题地导入并在之后正常工作。它只发生在 pyjmi 上(例如 pyfmi 将毫无问题地导入),这似乎表明它可能是与环境变量相关的问题。但是,我找不到它们有任何问题,在所有情况下JMODELICA_HOME,以及找到的所有其他环境变量pyjmi.environ似乎都可以正常工作。

我尝试通过安装 JModelica 2.2 来规避该问题,但问题仍然存在(无论是 2.1 还是 2.2)。但是应该注意的是,我在执行此操作时并没有卸载 JModelica 2.1。

如果有人对导致这种行为的原因有任何想法,我将不胜感激。

编辑: 事情已经发生了最坏的转变,现在我在使用 JModelica 2.1 时在任何情况下都无法导入 pyjmi(而之前的行为仍然适用于 JModelica 2.2)。我不知道到底发生了什么变化导致了这种情况。

4

1 回答 1

1

事实证明,问题在于我的 C:\ 驱动器中的一个文件夹中有一个名为 casadi.py(以及 casadi.pyc)的 Python 脚本。该脚本与 JModelica 的 casadi 模块完全无关。路径的顺序sys.path使得如果当前目录不是 C:\JModelica.org-2.2,它会在找到我想要的实际模块之前找到不相关的 casadi.pyc。为了解决这个问题,我只是重命名了不相关的脚本,尽管我认为手动更改内容sys.path也可以解决问题。

于 2018-05-23T17:39:37.493 回答