当numpy 1.8.0与py2exe一起打包时出现OMP警告

时间:2014-03-14 18:27:50

标签: numpy py2exe

import numpy

当我将一行脚本打包为a single executable window application using py2exe时,我会在启动时收到以下警告。

OMP: Warning #178: Function GetModuleHandleEx failed:
OMP: System error #126: The specified module could not be found.

仅当我构建为单个可执行文件时(即,仅当bundle_files = 1时)才会发生此警告。这是我的setup.py。

from distutils.core import setup
import py2exe

setup(
    options = {'py2exe': {'bundle_files': 1}},
    windows=['testnumpy.py'],
    zipfile = None,
)

此问题始于numpy 1.8.0。当我恢复到1.6.2时,警告不会显示出来。

通常py2exe打包的单个可执行文件将捕获警告和回溯并将它们保存到日志文件中。但不知何故,这些警告都没有被捕获,应用程序会创建一个控制台窗口来显示警告。我想禁止显示这个额外的控制台窗口。

如何修复此警告问题?

我尝试了什么(没有用):

  1. 我试过这个redirecting sys.stderr
  2. 我在openMP上搜索github numpy来源,假设OMP代表here提到它。但是,没有任何有用的结果。
  3. 我已将libiomp5md.dll复制到与setup.py相同的文件夹中。
  4. 我尝试了filterwarnings
  5. 我试过sys.excepthook。

2 个答案:

答案 0 :(得分:3)

正如我在评论中写的那样,从sourceforge安装numpy 1.8.1rc1确实解决了这个问题,虽然我真的不知道差异......

答案 1 :(得分:1)

我有numpy 1.13.1 + mkl和scipy 1.19.1这个问题。恢复到numpy 1.8.1rc1是不可接受的解决方案。

我将此问题跟踪到scipy.integrate子包。导入此包时会弹出警告消息。似乎也许使用MKL的库不喜欢从library.zip调用,这是py2exe在使用bundle选项2时放置包的地方。

解决方案是在py2exe安装脚本中排除scipy和numpy,并将整个包文件夹复制到分发目录中,并将该目录添加到主python脚本顶部的系统路径中。