2016-09-20 75 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

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

相關問題