我创建了我的第一个Python程序,我在PyCharm中运行它。
程序有一个GUI,它基本上会弹出一个窗口,有一个目录树,所以用户可以选择一个jpg文件,然后将图像二值化,然后让用户用滑块选择二进制阈值。它还会显示我执行图像转换的其他两个图像。
所以,我的问题是我根本无法将其构建为.exe。我试过Py2Exe,PyInstaller和CX_freeze。我已经尝试在Pyinstaller中构建自己的.spec文件,但都没有成功。
我正在运行2.7.6。我最初安装了64位Python,因此我卸载了与Python相关的所有内容并安装了32位Python。
最初当我使用pyinstaller时,我只会得到ImportError:%1不是有效的Win32应用程序,但是,因为现在构建.spec文件我得到了实际错误。我尝试过使用hooks(hiddenimports = [“wx”,“scipy”,“skimage”,“matplotlib”,“numpy”])来确保包含所有正确的文件,但仍然没有运气。
我现在收到的主要错误是:文件“_ufuncs.pyx”,第1行,在init中scipy.special._ufuncs(scipy \ special_ufuncs.c:19992)ImportError:没有名为_ufuncs_cxx的模块
我还在下面创建了一个较小的代码,只是弹出一个内部有一个绘图的Wx窗口,但是我在那里收到了同样的错误。
就像我提到的那样,我是Python的新手,我已经做了很多阅读,并且无法弄清楚这一点。我花了10到20个小时才试图让它正确编译。
下面不是我的实际程序,而是使用wxPython和MatPlotLib产生相同错误的小片段。
这是示例代码:
import wx
from PIL import Image
import matplotlib
matplotlib.use("WXAgg")
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas#,NavigationToolbar2WxAgg as NavigationToolbar
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy
from scipy import interpolate
from matplotlib.backends.backend_wx import NavigationToolbar2Wx
from skimage.filter.rank import entropy
from skimage.morphology import disk
from skimage.util import img_as_ubyte
from skimage import color
from skimage import io
import skimage
from numpy import arange, sin, pi
class CanvasPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
self.canvas = FigCanvas(self, -1, self.figure)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
self.SetSizer(self.sizer)
self.Fit()
def draw(self):
t = arange(0.0, 3.0, 0.01)
s = sin(2 * pi * t)
self.axes.plot(t, s)
if __name__ == "__main__":
app = wx.PySimpleApp()
fr = wx.Frame(None, title='test')
panel = CanvasPanel(fr)
panel.draw()
fr.Show()
这是我收到的错误:
Traceback (most recent call last):
File "<string>", line 11, in <module>
File "c:\python27_32bit\lib\site-packages\PyInstaller-2.1-py2.7.egg\PyInstalle\loader\pyi_importers.py", line 270, in
load_module
exec(bytecode, module.__dict__)
File "C:\users\iolvera\PycharmProjects\EL and Grayscale Analyzer\build\compilertest\out00-PYZ.pyz\scipy.interpolate",line 156, in <module>
File "c:\python27_32bit\lib\site-packages\PyInstaller-2.1-py2.7.egg\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\users\iolvera\PycharmProjects\EL and Grayscale Analyzer\build\compilertest\out00-PYZ.pyz\scipy.interpolate.interpolate", line 12, in <module>
File "c:\python27_32bit\lib\site-packages\PyInstaller-2.1-py2.7.egg\PyInstaller\loader\pyi_importers.py", line 270, in load_module
exec(bytecode, module.__dict__)
File "C:\users\iolvera\PycharmProjects\EL and Grayscale Analyzer\build\compilertest\out00-PYZ.pyz\scipy.special", line 531, in <module>
File "c:\python27_32bit\lib\site-packages\PyInstaller-2.1-py2.7.egg\PyInstaller\loader\pyi_importers.py", line 409, in load_module
module = imp.load_module(fullname, fp, filename, self._c_ext_tuple)
File "_ufuncs.pyx", line 1, in init scipy.special._ufuncs (scipy\special\_ufuncs.c:19992)
ImportError: No module named _ufuncs_cxx
我的Python路径是正确的C:\ Python27_32bit \我也正确包含\ lib \ site-packages \和\ DLL。
就像我提到的,两个程序都在PyCharm中正确运行。
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
我遇到了这个问题,我通过专门告诉它包含违规模块我在py2exe中修复了它。所以,在setup.py
:
includes = ['scipy.special._ufuncs_cxx']
setup(...,
options={"py2exe":{"includes":includes}}
)
我和其他几个SciPy模块也发生过这种情况,因此我的includes
列表中有大约六个内容。