使用 cx_freeze 时导入 PIL 时出错
Error importing PIL when using cx_freeze
我已经忙了一整天了,我打算把我的电脑扔掉 window。我使用 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")]
)
关于如何让它工作的任何想法?
谢谢!!
编辑: 很高兴这个解决方案对您有用!我会把它从评论中移到这里,以防它能帮助到其他人。
解决方法:
我在 Whosebug 上发现了类似的错误,OP 似乎找到了解决他自己问题的方法。他说他在他正在安装的某个版本的软件包上错误地使用了 pip install,这使得软件包下载为 .egg 文件,这似乎导致了 cx_freeze 的问题。可能不是解决方案,但在故障排除方面值得一试。
cx_freeze how to include 3rd party modules, ImportError: No module named progressbar
我有同样的错误消息并通过执行以下步骤解决了它(我正在使用 Windows):
从命令提示符卸载 Pillow (pip uninstall Pillow
)
下载.exe file version of new Pillow package
在我的例子中,我使用的是 Python 3.4,所以我为我的 Python 版本选择了合适的 .exe 文件。
安装exe文件
运行 setup.py 再次从 cmd 提示符 (C:/python34/python/python setup.py build
)
不再有错误。
我已经忙了一整天了,我打算把我的电脑扔掉 window。我使用 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")]
)
关于如何让它工作的任何想法?
谢谢!!
编辑: 很高兴这个解决方案对您有用!我会把它从评论中移到这里,以防它能帮助到其他人。
解决方法: 我在 Whosebug 上发现了类似的错误,OP 似乎找到了解决他自己问题的方法。他说他在他正在安装的某个版本的软件包上错误地使用了 pip install,这使得软件包下载为 .egg 文件,这似乎导致了 cx_freeze 的问题。可能不是解决方案,但在故障排除方面值得一试。
cx_freeze how to include 3rd party modules, ImportError: No module named progressbar
我有同样的错误消息并通过执行以下步骤解决了它(我正在使用 Windows):
从命令提示符卸载 Pillow (
pip uninstall Pillow
)下载.exe file version of new Pillow package
在我的例子中,我使用的是 Python 3.4,所以我为我的 Python 版本选择了合适的 .exe 文件。
安装exe文件
运行 setup.py 再次从 cmd 提示符 (
C:/python34/python/python setup.py build
)
不再有错误。