py2exe不包括来自“includes”的模块

问题描述:

我在Windows 7,64位上使用最新版本的Anaconda Python(3.4)和最新版本的py2exe(它应该支持Python 3.3和3.4)。py2exe不包括来自“includes”的模块

这里是我使用的py2exe脚本:

from distutils.core import setup 
import py2exe, sys, os 

sys.argv.append('py2exe') 

setup(
    options = { 
        'py2exe': { 
          'bundle_files': 2, 
          'optimize': 2, 
          'compressed': True, 
        } 
       }, 
    windows = [{'script': "ImageSound GUI.py"}], 
    data_files = [('images',['c:/Users/EvilDragon/Documents/GitHub/ImageSound/mario.png'])] 
) 

下面是py2exe返回输出:

84 missing Modules     
    ------------------     
? Cookie        imported from requests.compat, tornado.httputil, tornado.web 
? IPython.current_nbformat   imported from IPython.nbformat.validator 
? Image        imported from scipy.misc.pilutil 
? ImageFilter       imported from scipy.misc.pilutil 
? OpenGL        imported from IPython.lib.inputhook, IPython.lib.inputhookglut 
? PIL._imagingagg      imported from PIL.ImageDraw 
? PyQt5        imported from IPython.external.qt_loaders, PIL.ImageQt, matplotlib.pyplot 
? PySide        imported from IPython.external.qt_loaders, PIL.ImageQt 
? Queue        imported from IPython.kernel.blocking.channels, IPython.kernel.blocking.client, IPython.kernel.inprocess.blocking, IPython.kernel.inprocess.socket, IPython.kernel.manager, requests.packages.urllib3.connectionpool, zmq.eventloop.zmqstream 
? SocketServer      imported from zmq.ssh.forward 
? UserDict       imported from pytz.lazy 
? _abcoll        imported from requests.packages.urllib3.packages.ordered_dict 
? _grabscreen       imported from PIL.ImageGrab 
? _imaging_gif      imported from PIL.GifImagePlugin 
? _subprocess       imported from IPython.kernel.launcher, IPython.kernel.zmq.parentpoller 
? _util        imported from PIL.ImageCms 
? appnope        imported from IPython.external.appnope 
? backports       imported from requests.packages.urllib3.packages.ssl_match_hostname, setuptools.ssl_support, tornado.netutil 
? cloud        imported from IPython.utils.pickleutil 
? cookielib       imported from requests.compat 
? coverage       imported from IPython.testing.iptestcontroller 
? dill        imported from IPython.utils.pickleutil 
? gi         imported from IPython.kernel.zmq.gui.gtk3embed, IPython.lib.inputhookgtk3 
? glut_support      imported from IPython.lib.inputhook 
? gobject        imported from IPython.kernel.zmq.gui.gtkembed, IPython.lib.inputhookgtk, matplotlib.pyplot 
? gtk         imported from IPython.kernel.zmq.gui.gtkembed, IPython.lib.inputhook, IPython.lib.inputhookgtk 
? isodate        imported from jsonschema._format 
? matplotlib.backends._macosx   imported from matplotlib.backends.backend_macosx 
? mklfft        imported from numpy.fft 
? monotime       imported from tornado.platform.auto, zmq.eventloop.minitornado.platform.auto 
? mpl_toolkits.natgrid    imported from matplotlib.mlab 
? multiprocessing.SimpleQueue   imported from concurrent.futures.process 
? ndg         imported from requests.packages.urllib3.contrib.pyopenssl 
? netifaces       imported from IPython.utils.localinterfaces 
? packaging       imported from pkg_resources 
? paramiko       imported from zmq.ssh.tunnel 
? path        imported from IPython.external.path 
? pexpect        imported from IPython.external.pexpect, zmq.ssh.tunnel 
? pyczmq        imported from zmq.sugar.context 
? pydb        imported from IPython.core.debugger, IPython.core.interactiveshell 
? pyglet        imported from IPython.lib.inputhookpyglet 
? pysqlite2       imported from IPython.core.history 
? pywintypes       imported from - 
? repr        imported from IPython.core.debugger 
? resource       imported from IPython.external.pexpect._pexpect, IPython.utils.timing 
? rfc3987        imported from jsonschema._format 
? scikits        imported from scipy.sparse.linalg.dsolve.linsolve 
? scipy.arange      imported from scipy.sparse.linalg.isolve.minres 
? scipy.ones       imported from scipy.sparse.linalg.isolve.minres 
? setuptools_svn      imported from setuptools.command.egg_info 
? simplegeneric      imported from IPython.external.simplegeneric 
? simplejson       imported from requests.compat 
? singledispatch      imported from tornado.gen 
? strict_rfc3339      imported from jsonschema._format 
? unittest._WritelnDecorator   imported from nose.plugins.multiprocess 
? urllib.getproxies     imported from requests.compat 
? urllib.pathname2url     imported from setuptools.compat 
? urllib.proxy_bypass     imported from requests.compat 
? urllib.quote      imported from matplotlib.textpath, requests.compat 
? urllib.quote_plus     imported from requests.compat 
? urllib.splittag      imported from setuptools.compat 
? urllib.unquote      imported from jsonschema.compat, requests.compat 
? urllib.unquote_plus     imported from requests.compat 
? urllib.url2pathname     imported from setuptools.compat 
? urllib.urlencode     imported from IPython.lib.display, requests.compat, requests.packages.urllib3.request, tornado.httputil, tornado.web 
? urllib.urlopen      imported from IPython.core.interactiveshell, IPython.utils.openpy 
? urllib.urlretrieve     imported from IPython.core.extensions, IPython.html.nbextensions 
? webcolors       imported from jsonschema._format 
? win32api       imported from IPython.utils._process_win32, distutils.msvccompiler, platform, win32evtlogutil 
? win32com       imported from setuptools.sandbox 
? wincertstore      imported from setuptools.ssl_support 
? zmq.EAGAIN       imported from zmq.error 
? zmq.ETERM       imported from zmq.devices.basedevice, zmq.error, zmq.eventloop.ioloop 
? zmq.PUB        imported from zmq.devices.monitoredqueuedevice 
? zmq.QUEUE       imported from zmq.devices.basedevice 
? zmq.backend.Context     imported from zmq.sugar.context 
? zmq.backend.Frame     imported from zmq.sugar.frame, zmq.sugar.tracker 
? zmq.backend.Socket     imported from zmq.sugar.socket 
? zmq.backend.constants    imported from zmq.sugar.constants 
? zmq.backend.strerror    imported from zmq.error 
? zmq.backend.zmq_errno    imported from zmq.error 
? zmq.backend.zmq_poll    imported from zmq.sugar.poll 
? zmq.backend.zmq_version_info  imported from zmq.sugar.version 
? zmq.device       imported from zmq.devices, zmq.devices.basedevice 

    5 submodules that appear to be missing, but could also be global names in the parent package 
    --------------------------------------------------------------------------------------------- 
? numpy.conj       imported from scipy.io.mmio, scipy.linalg.decomp 
? numpy.log2       imported from scipy.sparse.linalg.matfuncs 
? scipy.spatial.cKDTree    imported from scipy.spatial 
? scipy.special.ellipeinc    imported from scipy.special 
? scipy.special.ellipkinc    imported from scipy.special 
Building 'dist\ImageSound GUI.exe'. 
Building shared code archive 'dist\library.zip'. 
Copy c:\program files\anaconda\python34.dll to dist 
Copy DLL C:\Program Files\Anaconda\DLLs\tcl86t.dll to dist 
Copy DLL C:\Program Files\Anaconda\DLLs\tk86t.dll to dist 
Copy DLL C:\Program Files\Anaconda\lib\site-packages\numpy\core\libiomp5md.dll to dist 
Copy DLL C:\Program Files\Anaconda\DLLs\sqlite3.dll to dist 
Copy DLL C:\Program Files\Anaconda\lib\site-packages\PyQt4\QtCore4.dll to dist 
Copy DLL C:\Program Files\Anaconda\lib\site-packages\portaudio_x64.dll to dist 
Copy DLL C:\Program Files\Anaconda\lib\site-packages\PyQt4\QtSvg4.dll to dist 
Copy DLL C:\Program Files\Anaconda\lib\site-packages\PyQt4\QtGui4.dll to dist 

然后,当我尝试运行我的EXE我得到这个回溯:

Traceback (most recent call last): 
    File "ImageSound.py", line 5, in <module> 
    File "C:\Program Files\Anaconda\lib\site-packages\zipextimporter.py", line 116, in load_module 
    raise zipimport.ZipImportError("can't find module %s" % fullname) 
zipimport.ZipImportError: can't find module skimage.draw 

即使我将skimage.draw添加到包含中,也不会改变......还有追溯更改,如果我设置bun dle_files以3:

Traceback (most recent call last): 
    File "ImageSound.py", line 5, in <module> 
    File "C:\Program Files\Anaconda\lib\site-packages\skimage\draw\__init__.py", line 1, in <module> 
    from .draw import circle, ellipse, set_color 
    File "C:\Program Files\Anaconda\lib\site-packages\skimage\draw\draw.py", line 3, in <module> 
    from ._draw import _coords_inside_image 
    File "<loader>", line 10, in <module> 
    File "<loader>", line 8, in __load 
ImportError: (No module named 'skimage._shared') 'C:\\Users\\EvilDragon\\Documents\\GitHub\\ImageSound\\dist\\skimage.draw._draw.pyd' 

这是完全超越我,因为它指向字节码,但是我从skimage.draw使用的唯一功能是线,这就是它!在这一点上我完全困惑不解。

编辑:我试着运行py2exe与各种包括和排除,以便它试图递归找到它所需要的,但无济于事。它会始终报告缺少skimage.draw或没有名为skimage._shared的模块。没有任何意义,他们是正确的,在我的lib/site-packages /文件夹!

另外任何有兴趣给它一个py2exe的镜头可以检查出这里的程序代码:https://github.com/mkruselj/ImageSound。必要的库:numpy,scipy,skimage,PIL,pyaudio。

以下是我使用的两个.py文件包含的所有内容(一个.py文件导入到另一个文件中)。

ImageSound.py:

from tkinter import * 
from tkinter import filedialog, ttk, messagebox 
from PIL import Image, ImageTk 
from numpy import array 
from skimage.draw import line as skline 
import time 
import DSP # this is the second .py file 

DSP.py:

from numpy import linspace, sin, pi, int16, array, append, multiply 
from scipy.io.wavfile import write as writewav 
from scipy.interpolate import UnivariateSpline as interpolate 
from math import sqrt 
import pyaudio 

感谢您的见解!

编辑#2:cx_freeze和PyInstaller也不想合作。我试着用nuitka直接编译东西,但是这更糟,因为它需要安装py2和py3以及C++编译器。我失败了。

+0

对于scipy包含错误尝试添加以下行到您的包括:'''''scipy.sparse.csgraph._validation'''它似乎是一个常见的错误。 –

+0

将尝试并报告回来!谢谢,弗兰! :) –

+0

不幸的是,没有工作,仍然是相同的缺失模块报告:( –

那么,因为cgohlke没有发布他的建议作为答案,让我这样做。

这个设置。PY导致了执行工作对我来说,使用py2exe:

from distutils.core import setup 
import py2exe, sys, os, skimage, PIL, numpy, scipy, pyaudio 

sys.argv.append('py2exe') 

setup(
    options = { 
        'py2exe': { 
          'bundle_files': 3, 
          'optimize': 2, 
          'includes': ['pyaudio', 'scipy', 'numpy', 'skimage', 'PIL', 'difflib', 'locale', 'inspect', 'skimage._shared', 'skimage._shared.geometry', 'scipy.special._ufuncs_cxx', 'scipy.linalg.cython_blas', 'scipy.linalg.cython_lapack', 'scipy.integrate', 'scipy.sparse.csgraph._validation'], 
          'excludes': ['pkg_resources','doctest', 'pdb', 'calendar', 'optparse', 'jsonschema', 'tornado', 'setuptools', 'distutils', 'matplotlib'] 
        } 
       }, 
    windows = [{'script': 'ImageSound.py'}], 
    data_files = [('images',['images/author.png'])] 
) 

诀窍是包括所有在setup.py中使用的库为好,而不是使用捆绑的文件选项(不幸的是我)!

我前段时间涉足pyexe,并且遇到了问题(虽然这是Python2.7和qt4)。我发现pyinstaller是一个更好的可执行文件包。正如该网站所说pyinstaller已经准备好迎接Python 3,它可能值得一试。

+0

我想我可以试试它,但“几乎准备就绪“听起来并不令人信服,我必须说...... –

+0

不,可悲的是,即使PyInstaller也不想合作:/ –

而不是使用“includes”我会建议使用“软件包”为您有问题的软件包。

看看“http://wiki.wxpython.org/py2exe-python26”有点过时了,但大多数仍然适用于最新的py2exe,特别是看看“zipfile = r'lib \ library.zip'”,以更好地组织您的dist文件夹。

+0

我试过使用'软件包'但没有真正起作用,无论如何,我的EXE工作,根据对最初的问题的最后评论。:) –