使用 pyinstaller 创建的 exe 文件无法识别外部源

exe file created with pyinstaller not recognizing the external sources

我用 Pyinstaller 成功创建了一个 exe 文件。但是,当我 运行 exe 文件并在弹出的 exe 文件的消息框中填写路径、文件和工作表名称时,会说我输入错误的文件名或工作表名称。显然我自己输入了这条消息,因此我的问题是:为什么 exe 文件无法找到我的文件,而当我在 PyCharm 中执行完全相同的操作时 运行 却没有问题?

 import pandas as pd
import numpy as np
import tkinter as tk
from tkinter import messagebox

def create_file():

try:
    FILEPATH = e0.get()
    w_filename = e1.get()
    x_filename = e2.get()
    y_filename = e3.get()
    z_inventory_filename = e4.get()
    aa_active_filename = e5.get()
    ab_test_filename = e6.get()
    output_filename = e7.get()

w_sheetname = e1_sheet.get()
x_sheetname = e2_sheet.get()
y_sheetname = e3_sheet.get()
z_sheetname = e4_sheet.get()
aa_sheetname = e5_sheet.get()
ab_test_sheetname = e6_sheet.get()
except:
    messagebox.showinfo("Error", "Please fill out all fields.")

try:
    w= pd.read_excel(FILEPATH +"\"+ w_filename, sheetname=w_sheetname, header=0)
    x = pd.read_excel(FILEPATH +"\"+ x_filename, sheetname=x_sheetname, header=0)
    y = pd.read_excel(FILEPATH +"\"+y_filename, sheetname=y_sheetname, header=0)
    z_inventory = pd.read_excel(FILEPATH +"\"+  z_inventory_filename, sheetname=z_inventory_sheetname, header=0)
    aa_active = pd.read_excel(FILEPATH +"\"+ aa_active_filename, sheetname=aa_active_sheetname, header=0)
    ab_test_ready = pd.read_excel(FILEPATH +"\"+ ab_test_filename, sheetname=ab_test_sheetname, header=0)
except:
    messagebox.showinfo("Error", "You have mistyped either a filename or a sheetname.")

希望有人对此有具体的回答。

谢谢,

杰伦

定义一个函数来转换路径。

import os, sys

def resource_path(relative_path):
    if hasattr(sys, "_MEIPASS"):
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

使用此功能扭曲您的文件路径,例如:

bingo_music = resource_path('resources/bingo.wav')
demo_file = resource_path('texts/demo.txt')

在您的 .spec 文件中,将列表放入 exe = EXE():

[('resources/bingo.wav', r'C:\Users\Administrator\resources\bingo.wav', 'music'),
[('texts/demo.txt', r'C:\Users\Administrator\texts\demo.txt', 'text'),],

将您在项目中使用的每个文件写成一个元组(relative_path, absolute_path, folder_name_in_bundled_app),第三个参数是捆绑应用程序中您的文件将被复制到的文件夹的名称。然后文件将正常工作。