【问题标题】:cx_freeze and scipy: "ImportError: cannot import name vode"cx_freeze 和 scipy: "ImportError: cannot import name vode"
【发布时间】:2013-04-21 00:33:47
【问题描述】:

我正在尝试从我的 python 脚本创建一个可执行文件。我的脚本运行良好,但冻结后,启动 .exe 给我以下错误:

http://www.bild.me/bild.php?file=4663406scipyerror.png

我正在使用 Python 3.2.3、Scipy 0.12.0b1、Numpy 1.7.0 和 Matplotlib 1.2.0(均为 32 位)。

关于如何解决这个问题的任何想法/提示?我的猜测是我必须在我的冻结脚本中手动包含一些东西,但我的猜测已经不多了:-(

我终于让它工作了,但我对我的解决方案非常不满意:

1) 将 SciPy 包中的 _odepack.pydodepack.py 复制到我的程序文件夹中

2) 在odepack.py 中将from . import _odepack 更改为import _odepack(否则会引发ValueError: Attempted relative import in non-package

3) 在我的主要更改中将from scipy.integrate import odeint 更改为from odepack import odeint

现在它按预期工作,使用 cx_freeze 后它仍在工作。
仍然不知道为什么它以前不起作用:-(

感谢 ThomasK 将我推向正确的方向 :-)

【问题讨论】:

  • 脚本的第 25 行是什么? vode 模块是什么形式的,你能在 build 目录的任何地方找到它吗?您确定使用的是最新版本的 cx_Freeze 吗?
  • @ThomasK 第 25 行是导入 from scipy.integrate import odeint。在构建目录中有 scipy.integrate._odepack.pyd,它是从 scipy/integrate 文件夹中复制而来的。我正在使用 cx_freeze 4.3.1,它似乎是最新版本。
  • 但是没有scipy.integrate.vode.pyd 文件?您的系统上是否有任何vode.pyd 文件?如果有,请尝试将其复制到 exe 旁边。
  • 我从 exe 旁边的 scipy.integrate 文件夹中复制了 vode.pyd,没有运气。与将其重命名为 scipy.integrate.vode.pyd 相同(因为所有 *.pyd 都这样重命名)。
  • 您看到的错误信息肯定还是一样?令人费解。

标签: python-3.x scipy cx-freeze


【解决方案1】:

我终于通过将“scipy.integrate.vode”指定为 cx 设置文件中的包含来解决这个 vode 问题。这导致文件“scipy.integrate.vode.pyd”最终出现在构建文件夹中。我在 Windows 上使用 SciPy 0.11、Python 3.2.3 和最新的 cx。

但是手动添加这样一个“scipy.integrate.vode”文件到构建文件夹也不能解决我的问题,即使许多其​​他 .pyd 文件需要这样的手动包含修复程序 cx 也找不到(而上述 setup.py 包含解决方案将不起作用)...

感谢您分享您的痛苦和智慧,否则不会设法冻结我的程序......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2016-10-03
    • 2019-07-20
    • 2016-05-16
    • 2018-10-27
    相关资源
    最近更新 更多