Pyinstaller 图像无法加载

问题描述 投票:0回答:8

问题

我正在尝试将 python 文件转换为 EXE 文件,但是我似乎每次都会遇到同样的问题,无论是 CX_Freeze 还是 Pyinstaller。我刚刚尝试使用 pyinstaller 并使用命令制作了一个 EXE 文件

pyinstaller --onefile thepyfile

一切正常。它在 dist 文件中创建 exe。但是,当我打开 exe 时,它会显示一个命令窗口,然后很快关闭。我设法捕获了使用打印屏幕时遇到的错误,它说 pygame错误:无法打开图像family.jpg。我正在使用 pygame 模块。

我尝试了什么?

Iv 确保图像与我的 python 文件位于同一目录和同一文件夹中。我的 .py 在运行时工作正常,它只是 exe。无论如何,只是为了确保在我使用

加入路径的路径中加载图像没有问题
os.path.join

它再次适用于 py 文件,但在 exe 中不起作用。我还检查了我是否正确安装了 pyinstaller,它适用于其他不涉及导入图像的 exe 程序。我也尝试创建一个文件夹然后使用

os.path.join(folder,file)

但它再次在 py 文件中起作用,但在 pyinstaller/cx_freeze exe 中不起作用。

有线索吗?

当我使用 CX__freeze 时,我发现 pygame 也无法导入图像。然而它给了我一个更大的错误案例,不确定它是否有用,但是,它可能是一个线索?

请帮忙

我遇到这个问题已经超过 5 周了,非常需要帮助。

一些代码

这就是我导入图像的方式(同样适用于 py 文件,但不适用于 exe)

family_image = pygame.image.load(os.path.join('folder',"family.jpg")).convert()

如果需要的话,这里是我的cx_Freeze setup.py,它也会生成exe文件,但会给我图像无法加载错误。

import cx_Freeze
import sys
import pygame
import random
import math
import os
os.environ['TCL_LIBRARY'] = "C:\\Program Files\\Python35\\tcl\\tc18.6"
os.environ['TK_LIBRARY'] = "C:\\Program Files\\Python35\\tcl\\tk8.6"


base = None

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





executables = [cx_Freeze.Executable("Treg&Shelly.py",shortcutName="Cards",shortcutDir="DesktopFolder",base = base)]

cx_Freeze.setup(
    name = "HAPPY NEW YEARS",
    options = {"build_exe":{"packages":["pygame","random","math"],"excludes" : ['tcl','ttk','tkinter','Tkinter'],"include_files":["family.jpg","newyears.png"]}},
    version = "0.01",
    description = "New Years Card",
    executables = executables

    )

注意

我的所有图像都位于单独的文件夹中,但可以通过我的 python 文件访问。

我也使用python 3.5

感谢您的回复

python pygame pyinstaller cx-freeze
8个回答
2
投票

如果您创建单文件夹捆绑包(删除 --onefile 参数),pyinstaller 捆绑有效,那么问题可能是这样的:

当您运行单文件包时,会创建一个临时文件夹结构。临时文件夹的名称是在运行时创建的,在捆绑时不知道。因此路径未知。

然而,Pyinstaller 添加了一个属性

sys._MEIPASS

,其中包含临时文件夹的绝对路径。所以,尝试这样的事情:

if getattr(sys, 'frozen', False): wd = sys._MEIPASS else: wd = '' family_image = pygame.image.load(os.path.join(wd,'folder',"family.jpg")).convert()

另请参阅

Pyinstaller 文档


0
投票
您可以使用 py2exe 将 python 转换为可执行文件。到目前为止,这种方法对我来说很有效。

pte.py

C:\Python\toexe>
中的脚本文件

    导航至
  1. C:\Python\toexe>
    
    
  2. 将您的
  3. xxx.py
     python 文件放在同一目录中
  4. 编辑

    pte.py

    文件如下:

    ---------------------------------------------------------

    从 distutils.core 导入设置

    导入py2exe

    setup(console=['xxx.py']) ## 用于 CLI 程序

    setup(windows=['xxx.py']) ### for gui

    ---------------------------------------------------------

  5. 执行此命令:

    C:\Python\toexe> pte.py py2exe


0
投票
看线:

options = {"build_exe":{"packages":["pygame","random","math"],"excludes" : ['tcl','ttk','tkinter','Tkinter'],"include_files":["family.jpg","newyears.png"]}},



考虑:

All my images are in a separate folder



include_files 部分指定基本目录中的两个文件,而不是单独的文件夹中。

尝试类似:

options = {"build_exe":{"packages":["pygame","random","math"],"excludes" : ['tcl','ttk','tkinter','Tkinter'],"include_files":[os.path.join("imageDir", "family.jpg"),os.path.join("imageDir","newyears.png")]}},



值得注意的是,这会将文件放置在基本目录中。 考虑为每个文件提供一个(输入,输出)元组,而不仅仅是输入来指定您想要这些文件的确切位置。

options = {"build_exe":{"packages":["pygame","random","math"],"excludes" : ['tcl','ttk','tkinter','Tkinter'],"include_files":[(os.path.join("imageDir", "family.jpg"), os.path.join("imageDir", "family.jpg")),(os.path.join("imageDir","newyears.png"),os.path.join("imageDir","newyears.png"))]}},


    


0
投票
由于您的冻结程序不知道它在哪个文件夹中,因此您应该使用

os.getcwd() :

python_powered = pygame.image.load(os.path.join(os.getcwd(),'images',"family.jpg")).conve‌​rt()

当然别忘了

import os


    


0
投票
提出的解决方案:

pyinstaller --noconfirm --onefile --windowed --splash image.jpg file.py after adding this you can import a py_splash after that used py_splash.close()
    

0
投票
我有一个替代解决方案。只需删除 pyinstaller 创建的目录并使用

auto-py-to-exe

通过

CLI

 在您的项目中安装 auto-py-to-exe:

pip install auto-py-to-exe


然后

auto-py-to-exe


你会看到 auto-py-to-exe gui

单击名为

Additional Files

 的选项卡,单击添加文件夹,然后选择文件夹,并在图像文件夹路径末尾添加 
.
 

点击查看

how to set


0
投票
您可以尝试将图像添加到与exe文件相同的路径。这对我有用。


-1
投票
只需在 python 文件位置的 cmd 提示符中输入 pip install pygame 我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.