2016-09-20 50 views
0

我已经用Pyinstaller创建了一个成功的exe文件。但是,当我运行exe文件并填写路径时,弹出exe文件的messagebox中的文件&表示文件名称错误,我输入了文件名或工作表名称。我明显自己输入这个消息,因此我的问题是:为什么exe文件遇到问题,而当我在PyCharm中完全相同时,运行它没有问题?使用pyinstaller创建的exe文件不能识别外部源

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.") 

希望任何人都有具体的答案。

感谢,

的Jeroen

+0

最有可能的路径问题,但很难说如果没有看到代码。 –

+0

我将在第二个 –

回答

0

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

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),第三个参数是您的文件将被复制到的捆绑应用程序中的文件夹的名称。然后文件将正常工作。

+0

添加它在我的情况下文件不会在同一个文件夹中或具有相同的名称......该解决方案还可以使用灵活的源路径或不同的命名文件?如果没有其他的选择吗? –

+0

是的,我更新了答案,你可以试试看。 –

相关问题