在Windows上为Python 3创建程序,无法使用PIL?

2 投票
2 回答
788 浏览
提问于 2025-04-17 10:58

我写了一个相对简单的图形界面程序,用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文件时,一切都正常,但这似乎以某种方式破坏了它。其他模块,比如shutil、os和sys等,似乎都能正常工作。

2 个回答

0

以前我发现 cx_Freeze 在 Windows 系统下有时候会找不到正确的 DLL 文件。

我使用了 Process Explorer 这个工具来查看哪些 DLL 文件被需要但没有找到,然后我手动把这些文件加到项目里,这样就能正常工作了。因为这个方法对任何文件都适用,我想在你的情况下也可以试试。

这是我在使用 PySFML 时遇到的情况,所以你的情况可能会有所不同。

4

我觉得你主要的问题可能是Python图像库(PIL)还不支持Python 3.x。

如果你去看一下PIL下载页面,你会发现有适用于Python 2.4、2.5、2.6和2.7的Windows版本,但没有适用于Python 3.x的版本。

这个问题有一个答案,详细介绍了一些非官方的PIL移植版本,适用于Python 3.x,值得一试。

如果这个方法有效,你可以看看PIL常见问题解答中的第一个问题,它是关于“_imaging C模块未安装”的错误,并列出了你可以做的几件事来找出问题所在。

撰写回答