我写了一个相当简单的GUI程序,为Python的Windows用户提供了一些自动化的过程(因为它是我唯一熟悉的编程语言在Windows上运行)。理想情况下,我希望用户必须在他们的计算机上运行安装程序,因为我的计划是为了它在USB驱动器中运行自包含。

取决于操作系统,shutil,string,sys,tkinter,webbrowser,pil,ftplib和glob。

似乎当我在它上运行cx_freeze时导入了所有依赖项,除了PIL。我以前从未使用过cx_freeze,所以我可能会做错事,但它看起来并不像它。从Unfrozen .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 Faq,似乎这个答案的主旨是我需要确保我的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%,但这似乎以某种方式打破它。例如,其他模块似乎只能正常工作,例如suppil,操作系统和sys。

有帮助吗?

解决方案

我认为您的主要问题可能是Python映像库(PIL)尚不支持Python 3.x.

如果您查看 Pil下载页面您将看到它Python 2.4,2.5,2.6和2.7有Windows下载,但Python 3.x没有任何东西。

这个问题有一个答案,详细说明了Python 3的PIL的非官方港口。x可能值得尝试。

如果它可以查看在Pil Faq的第一个问题关于“_imaging c模块未安装的_imaging c模块”错误,并列出您可以做的各种东西以识别问题。

其他提示

在过去我发现cx_freeze在Windows下的正确DLL中提出了问题。

我使用了进程explorer 追踪DLL的寻找,但找不到,然后手动将它们添加到项目中,这使其工作。对于任何文件都这样做相同,我想象在你的情况下可以做到这一点。

这是我用pysfml的用法,因此您的里程可能会有所不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top