2016-08-15 4 views
4

私はスタックオーバーフローと私のPythonアプリケーションにデータファイルを追加する方法についてはウェブの残りの部分をコーミングされています:誰もがPyinstallerでデータファイルを1つのファイルにバンドルしましたか?

import Tkinter 

class simpleapp_tk(Tkinter.Tk): 
    def __init__(self,parent): 
     Tkinter.Tk.__init__(self,parent) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     self.grid() 

--- Everything Fine Here --- 

     self.B = Tkinter.Button(self, text = 'Create Document', command = self.OnButtonClick) 
     self.B.grid(column = 0, row = 6) 


    def OnButtonClick(self): 
     createDoc() 

if __name__ == "__main__": 
    app = simpleapp_tk(None) 
    app.title('Receipt Form') 
    app.iconbitmap(os.getcwd() + '/M.ico') 
    app.mainloop() 

私は正常に動作

Onedir運と.specファイルを使用して試してみましたしかし、1つの実行可能ファイルにコンパイルしようとすると、ファイル 'M.ico'が定義されていないというエラーが発生します。

誰かがpyinstallerを使用してデータファイルを1つのファイルにバンドルできる場合は、助けてください。ありがとう。

私はpyInstallerの3.2

+0

あなたの問題は、 'pyinstaller' [ファイルを解凍するために一時フォルダを使う](https://pythonhosted.org/PyInstaller/advanced-topics.html#bootloader)です。フリーズされたアプリケーションのコードで、[ここ](http://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile)と指定しています。 – Repiklis

+0

@Repiklisさて、これをどうやって使うのですか? 'app.iconbitmap(resource_path( '/ M.ico'))' –

+0

これは[this]と非常によく似ています(http://stackoverflow.com/questions/38874563/pypandoc-in-combination-with-pyinstaller/ 38957523#38957523)。スペックファイルの 'resources'にあなたのアイコンを含める必要があります。アイコンの設定の前に、コードの答えの下に2行を追加する必要があります。まだ問題がある場合は、私に知らせてください。 – Repiklis

答えて

2

でのPython 2.7を実行しているWindows 10コンピューター上で午前あなたは、すべてのデータは、あなたが(.specがはるかに簡単です、あなたのpyInstallerの.specファイルに追加、またはコマンドラインオプションを経由するファイルを指定する必要があります。あなたが任意のデータファイルにアクセスしようとしている場合は、あなたのコード内で、.specファイルに指定され、あなたがpyInstallerの者を使用する必要があり、この後

# -*- mode: python -*- 

block_cipher = None 


a = Analysis(['pubdata.py'], 
      pathex=['.', '/interface','/recommender'], 
      binaries=None, 
      datas=[('WordNet/*.txt','WordNet'), 
      ('WordNet/*.json','WordNet'), 
      ('WordNet/pdf_parsing/*.json','pdf_parsing'), 
      ('WordNet/pdf_parsing/*.xml','pdf_parsing'), 
      ('images/*.png','images'), 
      ('database/all_meta/Flybase/*.txt','all_meta'), 
      ('database/all_meta/Uniprot/*.txt','all_meta'), 
      ('database/json_files/*.json','json_files'), 
      ('Data.db','.')], 

      hiddenimports=['interface','recommender'], 
      hookspath=[], 
      runtime_hooks=[], 
      excludes=[], 
      win_no_prefer_redirects=False, 
      win_private_assemblies=False, 
      cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
      cipher=block_cipher) 
exe = EXE(pyz, 
      a.scripts, 
      exclude_binaries=True, 
      name='GUI', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True) 
coll = COLLECT(exe, 
       a.binaries, 
       a.zipfiles, 
       a.datas, 
       strip=False, 
       upx=True, 
       name='GUI') 
app = BUNDLE(coll, 
      name='App.app', 
      icon=None) 

:)以下は、「件のデータ」セクションで、私の.specファイルですあなたのファイルを参照する_MEIPASSフォルダ。ここで私はData.dbという名前のファイルにそのようにした方法です:

import sys 
import os.path 

     if hasattr(sys, "_MEIPASS"): 
      datadir = os.path.join(sys._MEIPASS, 'Data.db') 
     else: 
      datadir = 'Data.db' 

     conn = lite.connect(datadir) 

この方法は、上記の独自の上にあったこの文を置き換える:私が行っていたとき

conn = lite.connect("Data.db") 

このリンクは私をたくさん助けました同じものを介して: https://irwinkwan.com/2013/04/29/python-executables-pyinstaller-and-a-48-hour-game-design-compo/

これは役立ちます!

関連する問題