AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77022075
Accepted
d'Elbreil Clément
d'Elbreil Clément
Asked: 2023-09-01 17:45:38 +0800 CST2023-09-01 17:45:38 +0800 CST 2023-09-01 17:45:38 +0800 CST

Pyinstaller 图像数据放入根文件中但未找到错误

  • 772

我使用 pyinstaller 从我的 Python 源代码创建了一个目录 exe。在我的代码中,我使用图像并将图像相对图像路径放在 .py 文件旁边。

当我阅读 pyinstaller 文档时,我尝试了两件事:使用 -add 数据的官方方法和将图像直接复制到 main.exe 旁边的另一种方法。

使用这两种方法,我尝试启动 main.exe,但收到未找到错误:

无法打开“bdd_trans.png”:没有这样的文件或目录

因此,我尝试在启动 exe 时查看当前工作目录在哪里:

from os import getcwd
path = getcwd()
print(path)

然后我将所有图像粘贴到打印目录中,然后 exe 应用程序就可以工作了。问题是我必须放置图像的目录位于 Windows 用户数据上,而该目录不在构建文件夹内。因此,我无法将我的应用程序发送给某人并使其立即运行,这是一件大事。

有人知道为什么官方方法对我不起作用吗?

这是我正在运行的 pyinstaller 命令:

pyinstaller --noconfirm --onedir --windowed --icon "C:/app_final_v8/base-de-donnees.ico" --add-data "C:/app_final_v8/actualiser_trans.png;." --add-data "C:/app_final_v8/ajouter_trans.png;." --add-data "C:/app_final_v8/bdd_trans.png;." --add-data "C:/app_final_v8/client_trans.png;." --add-data "C:/app_final_v8/composant_trans.png;." --add-data "C:/app_final_v8/cyxplus_red.png;." --add-data "C:/app_final_v8/employees_trans.png;." --add-data "C:/app_final_v8/equipement_trans.png;." --add-data "C:/app_final_v8/exporter_trans.png;." --add-data "C:/app_final_v8/modifier_trans.png;." --add-data "C:/app_final_v8/quitter_trans.png;." --add-data "C:/app_final_v8/rechercher_trans.png;." --add-data "C:/app_final_v8/retour_trans.png;." --add-data "C:/app_final_v8/site_trans.png;." --add-data "C:/app_final_v8/supprimer_trans.png;." --add-data "C:/app_final_v8/ticket_trans.png;." --add-data "C:/app_final_v8/trait.png;."  "C:/app_final_v8/main.py"

这是尝试运行 exe 的输出:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
  File "app.py", line 98, in __init__
  File "page_accueil.py", line 26, in __init__
  File "tkinter\__init__.py", line 4061, in __init__
  File "tkinter\__init__.py", line 4006, in __init__
_tkinter.TclError: couldn't open "bdd_trans.png": no such file or directory
[11300] Failed to execute script 'main' due to unhandled exception!

以下是我使用数据图像的方式:

correspondance_table_icone = {
    "activite_client": "trait.png",
    "type_anomalie": "trait.png",
    "client": "client_trans.png",
    "composant": "composant_trans.png",
    "contrat_maintenance": "trait.png",
    "employe":"employees_trans.png",
    "equipement": "equipement_trans.png",
    "extension_chrono": "trait.png",
    "fabricant_composant": "trait.png",
    "fonction_composant": "trait.png",
    "pays": "trait.png",
    "sous_client": "trait.png",
    "ticket": "ticket_trans.png",
    "trigramme": "trait.png",
    "type_equipement": "trait.png",
    "type_ticket": "trait.png",
    "site": "site_trans.png",
    "ville": "trait.png"
}
for ligne in range(len(controller.base.nom_tables)):
            table = controller.base.nom_tables[ligne]
            icon_image = PhotoImage(file = correspondance_table_icone[table])
            self.dict_bouton_tab[table] = tb.Button(canvas_tab.interior, text = correspondance_table_tab[table][0], image=icon_image, compound="left", style = 'Custom_tab.Outline.TButton', command = lambda _table = table: self.afficher_table(controller.base, _table), bootstyle = INFO)
            self.dict_bouton_tab[table].image = icon_image
            self.dict_bouton_tab[table].grid(row = correspondance_table_tab[table][1], column = 0, sticky = "nsew")
python
  • 1 1 个回答
  • 17 Views

1 个回答

  • Voted
  1. Best Answer
    Gordian
    2023-09-01T18:48:48+08:002023-09-01T18:48:48+08:00

    Tkinter 不知道 bdd_trans.png 的位置。您需要修改程序才能检测到这些文件。我建议执行以下操作:


    1. 为您的所有文件创建一个规格文件!将所有图像一张一张地添加是一种不好的做法,并且会产生冗余。有关创建spec文件的更多信息,请参阅:Pyinstaller Spec文件

    1. 创建一个包含以下内容的 Python 脚本(例如“add_lib.py”):
    import sys,os
    sys.path.append(os.path.join(os.getcwd(), 'lib'))
    

    sys.path 包含 Python 在其中查找导入模块和类似文件的目录。通过附加子文件夹的路径,您可以让 Python 解释器找到您移动的文件。在上面的代码中,sys.path包含当前工作目录(getcwd)和子文件夹名称“lib”,可以将其调整为您喜欢的任何名称。


    1. 将您的 python 脚本('add_lib.py')添加到运行时挂钩列表中,并使用 PyInstaller 构建您的程序:

    您提供的任何运行时挂钩都将在主脚本之前执行。您可以简单地修改 *.spec 文件或使用相应的控制台命令:

    pyinstaller main.py --runtime-hook add_lib.py
    

    1. 将大多数文件(不是文件夹)移至您的子目录

    有关详细说明,请参阅以下媒体文章。

    • 1

相关问题

  • 如何将 for 循环拆分为 3 个单独的数据框?

  • 如何检查 Pandas DataFrame 中的所有浮点列是否近似相等或接近

  • “load_dataset”如何工作,因为它没有检测示例文件?

  • 为什么 pandas.eval() 字符串比较返回 False

  • Python tkinter/ ttkboostrap dateentry 在只读状态下不起作用

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve