Я создал свою самую первую программу на Python для работы, и она работает в PyCharm.
Программа имеет графический интерфейс, она в основном открывает окно, имеет дерево каталогов, поэтому пользователь может выбрать файл jpg, затем она бинаризирует изображение, а затем позволяет пользователю выбрать двоичный порог с помощью ползунка. Он также отображает два других изображения, над которыми я выполняю преобразования изображений.
Итак, моя проблема в том, что я вообще не могу собрать его в .exe. Я пробовал Py2Exe, PyInstaller и CX_freeze. Я пытался создать свои собственные файлы .spec в Pyinstaller, но все безуспешно.
У меня 2.7.6. Изначально у меня был установлен 64-битный Python, поэтому я удалил все, что связано с Python, и установил 32-битный Python.
Первоначально, когда я использовал pyinstaller, я просто получал сообщение ImportError: %1 не является допустимым приложением Win32, однако после создания файла .spec теперь я получаю фактические ошибки. Я пытался использовать хуки (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.
Любая помощь будет принята с благодарностью.
Благодарю вас!