使用py2exe打包Python软件时出现“libiomp5md.dll未找到”的错误

15
我在Windows 7操作系统中使用Python 2.7。我希望使用py2exe将我的project.py打包成可执行文件。按照说明,我编写了一个setup.py文件。

我有Python 2.7在Window 7操作系统上。我希望使用py2exe将我的project.py打包成可执行文件。按照指示,我编写了一个setup.py文件。

from distutils.core import setup
import py2exe

setup(console=["project.py"])  

我收到了这条消息

在此输入图像描述

我试图排除 'libiomp5md.dll'

from distutils.core import setup
import py2exe

setup(console=["SegmentationAccuracy.py"])

dll_excludes = ['libiomp5md.dll']

但是我总是收到相同的错误信息 "error: libiomo5md.dll:没有这个文件或目录"

我的可执行文件包含:

import math
import os
import numpy as np
import sys
import ogr
from progressbar import ProgressBar
from shapely.geometry import Polygon
nan = np.nan

您可以通过单击左上角的图标并转到“编辑-> 标记”来复制Windows控制台的输出,并按“Enter”键进行复制。 - danodonovan
这个问题已经十个月了,您能否请接受一个答案? - bdesham
4个回答

29

我遇到了同样的问题,但是在 setup.py 中调用 import numpy 解决了这个问题。


1
嘿@ChrisB。我刚刚把libiomp5md.dll文件移动到setup.py文件夹中,现在它可以工作了。 - Gianni Spear
"import numpy" 对我也起作用了。你真的不想移动 DLL 文件,因为其他组件可能依赖于它们在特定位置上的存在。 - Pierre

9

libiomp5md.dll是来自英特尔C编译器的文件,用于OpenMP多处理操作。我猜想你的代码涉及到numpy或使用英特尔编译器编译的代码,因此你的py2exe构建依赖于它。

你不能简单地创建一个没有它的构建,所以我建议在你的系统中找到它,并将其复制到运行python setup.py py2exe的目录中。提示:我在C:\Python27\Lib\site-packages\numpy\core中有一份拷贝。

[如果你真的想要排除它,那么你必须使用Visual Studio或Msys手动编译numpy。]

一旦你在执行python setup.py py2exe的目录中有了libiomp5md.dll,那么你只需要删除exclude_dll行(因为你不想排除它……)

from distutils.core import setup
import py2exe

setup(console=["SegmentationAccuracy.py"])

0

好的,我曾经遇到过同样的问题。原来sklearn中的一个.pyd文件引用了libiomp5md.dll。Py2exe在两个地方查找您的DLL - 环境变量路径和与.pyd文件相同的目录中。但是libiomp5md.dll都不在这两个地方。Py2exe基本上放弃了,而不是给出完整的路径名,例如c:\ Python27 \ lib \ site-packages \ numpy \ core \ libiomp5md.dll,它说“libiomp5md.dll”,后来找不到。

我很不耐烦。 我在我的设置文件中添加了一行:

os.environ [“PATH”] + = os.pathsep + os.path.dirname(numpy.core.file

这就是libiomp5md.dll所在的位置。现在一切正常。只需确保在调用设置之前在代码中执行此操作,它也将为您工作。


我添加了“import numpy”,因为它告诉我numpy未定义,现在我得到了“'module' object has no attribute 'file'”错误。 - sliders_alpha

0

我曾经遇到过同样的问题。 我需要在一台机器上安装numpy,并使用mingw gcc编译器进行安装。 我确认:dll文件的副本位于C:\Python27\Lib\site-packages\numpy\core\

我只需在启动设置之前将其复制到工作目录中即可。

在setup.py中没有特别需要调整的地方,依赖项会自动被找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接