【问题标题】:Unable to import pyjmi module when changing directory更改目录时无法导入pyjmi模块
【发布时间】:2018-05-18 14:47:26
【问题描述】:

我在 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)。我不知道究竟是什么变化导致了这种情况。

【问题讨论】:

  • 也许尝试重新安装casadi
  • 您的安装文件夹中有 casadi_core.py 吗? (即在 /JModelica.org/install/Python/casadi/ 中)
  • @ChristianWinther 是的,事实上 pyjmi 在 JModelica 2.2 中工作得非常好(例如我可以毫无问题地运行 VDP 示例),但前提是我事先没有使用 cd 命令。在 JModelica 2.1 中,它在任何情况下都不起作用。所有这些都是我以前从未有过的近期行为。
  • @matth 我没有使用 casadi 的单独安装,而是使用 JModelica 安装的那个,所以我不能用 pip 重新安装它,除非我重新安装我的整个 JModelica 安装。但是,我会尝试重新安装,因为全新的 JModelica 安装并没有起到作用,不幸的是我怀疑它会做任何事情。另外,为了获得信息,我尝试使用 JModelica SDK 从源代码重新编译,但这并没有解决问题。
  • 您可以使用python -m pip install -U casadi 来确保使用正确的点子。只要确保您使用的是相同的 python 可执行文件。 docs.python.org/3/installing/…

标签: modelica jmodelica


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2020-10-14
    相关资源
    最近更新 更多