【问题标题】:Error importing PIL when using cx_freeze使用 cx_freeze 时导入 PIL 时出错
【发布时间】:2015-03-07 00:53:45
【问题描述】:

我一整天都在做这件事,我要把我的电脑扔出窗外。我使用 tkinter、matplotlib 和 PIL 制作了一个 UI。如果我运行代码,它会完美运行,但是当使用 cx_freeze 冻结时,我会在执行python setup.py build 时得到以下信息:

c:\Python33>python setup.py build
running build
running build_exe
Traceback (most recent call last):
  File "setup.py", line 18, in <module>
    executables = [Executable("interface.py", base = base, icon="link.ico")]
  File "c:\Python33\lib\site-packages\cx_Freeze\dist.py", line 365, in setup
    distutils.core.setup(**attrs)
  File "c:\Python33\lib\distutils\core.py", line 148, in setup
    dist.run_commands()
  File "c:\Python33\lib\distutils\dist.py", line 929, in run_commands
    self.run_command(cmd)
  File "c:\Python33\lib\distutils\dist.py", line 948, in run_command
    cmd_obj.run()
  File "c:\Python33\lib\distutils\command\build.py", line 126, in run
    self.run_command(cmd_name)
  File "c:\Python33\lib\distutils\cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "c:\Python33\lib\distutils\dist.py", line 948, in run_command
    cmd_obj.run()
  File "c:\Python33\lib\site-packages\cx_Freeze\dist.py", line 235, in run
    freezer.Freeze()
  File "c:\Python33\lib\site-packages\cx_Freeze\freezer.py", line 575, in Freeze

    self.finder = self._GetModuleFinder()
  File "c:\Python33\lib\site-packages\cx_Freeze\freezer.py", line 330, in _GetMo
duleFinder
    finder.IncludePackage(name)
  File "c:\Python33\lib\site-packages\cx_Freeze\finder.py", line 579, in Include
Package
    module = self._ImportModule(name, deferredImports)
  File "c:\Python33\lib\site-packages\cx_Freeze\finder.py", line 288, in _Import
Module
    raise ImportError("No module named %r" % name)
ImportError: No module named 'PIL'

我的源代码在导入中有以下内容:

import pymysql
import csv
from itertools import groupby
from collections import defaultdict
from collections import OrderedDict
import math
import os
import glob
from tkinter import *
from tkinter import ttk
import tkinter.filedialog
import tkinter.messagebox
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from tkinter import PhotoImage
import PIL
import win32com.client

正如我上面所说,它工作正常。有没有办法手动导入或类似的东西?我在许多网站上看到 cx_freeze 有时会在导入某些模块的某些依赖项时遇到问题。

最初,我只是在编译时遇到了该错误,并在单击结果出现的可执行文件时遇到了上述错误。我尝试直接在 setup.py 文件中添加 PIL 模块,但在 cmd 上遇到了同样的错误。

这里是 setup.py 以防万一:

import sys

from cx_Freeze import setup, Executable



base = None
if sys.platform == "win32":
    base = "Win32GUI"

build_exe_options = {"packages": ["PIL"]}

setup(
        name = "Link",
        version = "1.0",
        description = "SLA screen program for CRM.",
        options = {"build_exe": build_exe_options}, 
        executables = [Executable("interface.py", base = base, icon="link.ico")]


)

关于如何让它发挥作用的任何想法?

谢谢!!

【问题讨论】:

  • 我在 StackOverflow 上发现了一个类似的错误,而且 OP 似乎已经找到了解决他自己问题的方法。他说他在他正在安装的一个软件包版本上错误地使用了pip install,它使软件包下载为.egg 文件,这似乎导致cx_freeze 出现问题。可能不是解决方案,但在故障排除方面值得一试。 stackoverflow.com/questions/22116350/…
  • 你我的朋友,搞定了。完全相同的问题。它被下载为一个鸡蛋文件。以不同的方式安装它并解决问题!如果需要,您可以将其发布为答案...

标签: python python-3.x python-imaging-library cx-freeze


【解决方案1】:

编辑:很高兴这个解决方案对您有用!我会把它从 cmets 移到这里,以防它可以帮助其他人。


解决方案: 我在 StackOverflow 上发现了类似的错误,并且 OP 似乎找到了解决他自己问题的方法。他说他在他正在安装的一个软件包版本上错误地使用了 pip install,它使软件包下载为 .egg 文件,这似乎导致 cx_freeze 出现问题。可能不是解决方案,但在故障排除方面值得一试。

cx_freeze how to include 3rd party modules, ImportError: No module named progressbar

【讨论】:

    【解决方案2】:

    我有同样的错误信息,并通过执行以下步骤解决了它(我使用的是 Windows):

    1. 在 cmd 提示符下卸载 Pillow (pip uninstall Pillow)

    2. 下载.exe file version of new Pillow package

      就我而言,我使用的是 Python 3.4,因此我为我的 Python 版本选择了合适的 .exe 文件。

    3. 安装exe文件

    4. 在 cmd 提示符下再次运行 setup.py (C:/python34/python/python setup.py build)

    没有更多错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多