python - py2exe 不包括来自 "includes"的模块

标签 python py2exe

我在 64 位 Windows 7 上使用最新版本的 Anaconda Python (3.4) 和最新版本的 py2exe(应该支持 Python 3.3 和 3.4)。

这是我正在使用的 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 添加到 includes 也不会改变...如果我将 bundle_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 中使用的唯一函数是 Line,仅此而已!在这一点上我完全感到困惑。

编辑:我已经尝试运行带有各种包含和排除的 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 编译东西,但这更糟,因为它需要与 C++ 编译器一起安装 py2 和 py3。我惨遭失败。

最佳答案

好吧,由于 cgohlke 没有将他的建议作为答案发布,所以让我这样做吧。

这个 setup.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 中也包含所有使用的库,而不是使用捆绑文件选项(对我来说很不幸)!

关于python - py2exe 不包括来自 "includes"的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32395904/

相关文章:

python - Py2Exe 生成日志文件

python - asyncore 回调启动线程...可以吗?

python - (Python)正确的命名法是什么,以便我可以搜索和了解它?

python - 在 Python 中循环 : Do stuff before first iteration

python - 如何将 python .py 文件转换为跨平台使用的可执行文件?

python - 如何将cefpython1捆绑到py2exe

c++ - 基于 Python 的游戏——它们是如何制作的?

python - 将字典列表转换为列表列表

python - 通过 Esky 任务获取进度

python - 在 py2exe 构建中包含 PYD/DLL