2016-09-20 19 views
0

Pyinstallerでexeファイルを作成しました。しかし、私がexeファイルを実行し、パスを記入すると、ファイル&は、exeファイルをポップアップするメッセージボックスのシート名は、ファイル名またはシート名のいずれかを誤って入力したファイルを示しています。私は明らかにこのメッセージを自分で入力するので、私の質問は:なぜ、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

私はそれを2番目に追加します –

答えて

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) 

使用この機能を例えば、あなたのファイルパスをワープする:あなたの.specファイルで

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

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)のタプルとして、3番目の引数は、ファイルがコピーされるバンドルされたアプリケーション内のフォルダの名前です。その後、ファイルは正常に動作します。

+0

私の場合、ファイルは同じフォルダにないか同じ名前になります...このソリューションはフレキシブルなソースパスまたは別の名前付きファイルでも動作しますか?それ以外のオプションはありませんか? –

+0

はい、私は答えを更新します、あなたはそれを試すことができます。 –

関連する問題