我编写了一个相当简单的 GUI 程序,用 Python 为 Windows 用户自动执行一些流程(因为它是我比较熟悉的唯一可以在 Windows 上运行的编程语言)。理想情况下,我不希望用户必须在他们的机器上运行安装程序,因为我的计划是让它在 USB 驱动器中独立运行。
它依赖于 os、shutil、string、sys、tkinter、webbrowser、PIL、ftplib 和 glob。
当我在它上面运行 cx_freeze 时,似乎所有的依赖项都被导入了,除了 PIL。我以前从未使用过 cx_freeze,所以我可能做错了什么,但看起来不像。从解冻的 .py 脚本运行程序就可以了。
这是我在尝试使用 PIL 命令时收到的错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
return self.func(*args)
File "E:\AlbumUploader.py", line 143, in OnButton2Click
img.thumbnail(size, Image.ANTIALIAS)
File "C:\Python32\lib\site-packages\PIL\Image.py", line 1573, in thumbnail
self.load()
File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 168, in load
self.load_prepare()
File "C:\Python32\lib\site-packages\PIL\ImageFile.py", line 234, in load_prepare
self.im = Image.core.new(self.mode, self.size)
File "C:\Python32\lib\site-packages\PIL\Image.py", line 39, in __getattr__
raise ImportError("The _imaging C module is not installed")
ImportError: The _imaging C module is not installed
感谢您的任何帮助,您可以提供。我看到它仍在引用 C:\Python32 这可能是问题的一部分,因为它不应该是(如果我没记错的话)。
更新:
我查看了 PIL 常见问题解答,似乎该答案的要点是我需要确保我的 sys.path 列表是正确的。我基本上抓取了所有适用于 Windows 的 Python 文件并将其包含在我试图用来包含所有内容的 USB 驱动器中,并将我的路径设置为:
program_dir = os.path.split(sys.argv[0])[0]
sys.path = [program_dir]
sys.path.append(program_dir + os.sep + 'Lib')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages')
sys.path.append(program_dir + os.sep + 'Lib' + os.sep + 'site-packages' + os.sep + 'PIL')
sys.path.append(program_dir + os.sep + 'DLLs')
所有路径似乎都是正确的,但由于某种原因,我仍然遇到同样的错误。当我运行 .py 文件时,一切都 100% 正常工作,但这似乎以某种方式破坏了它。其他模块似乎工作得很好,例如 shutil、os 和 sys。