2016-10-05 7 views
0

私はかなりプログラミング(とPython)とstackoverflowの質問/応答システムで私は今まで私のすべての問題を解決することができました。しかし、私は現在の問題に直接対処する投稿は見つけられませんでしたが、何が間違っているのか分かりません。私に説明させてください。Pyinstallerは.txtファイルを追加できません

Pyinstallerを使用して.pyファイルの実行可能ファイルを作成しようとしています。単純な.pyプログラム(--onefileを使用)で実行するのに問題はありませんが、他の.pyおよび.txtファイルを使用するより複雑なプログラムの場合は機能しません。私はspecファイルを修正する必要があることを知り、多くの選択肢を試しました。たとえば、隠しファイルを追加します。ここで

は、ファイルは次のとおりです。

  • UpdatingStrategy.py(ターゲットファイルが実行可能ファイルに変換するために)
  • LPRfunctions.py(UpdatingStrategy.pyは、このファイルから関数をインポート)

次の.txtファイルはUpdatingStrategy.pyによって読み取られます。

    あなたが必要な場合は
  • Strategy_Observ.txt
  • Strategy_Problems.txt
  • Updating_Observ1.txt
  • Updating_Observ2.txt
  • Updating_Problems.txt

私が使用しているpython3.5や窓10を教えてください追加情報。

スペックファイルの使用方法を教えて、UpdatingStrategy.pyの実行ファイルを作成するために変更する方法はありますか?以前はPyinstallerのドキュメントを読んだことがありますが、私はそれが機能しないように多くの重要な原則が欠けています。

答えて

2

ライン

a = Analysis(...) 

は、あなたのプログラムに

def resource_path(relative_path): 
    """ Get absolute path to resource, works for dev and for PyInstaller """ 
    try: 
     # PyInstaller creates a temp folder and stores path in _MEIPASS 
     base_path = sys._MEIPASS 
    except Exception: 
     base_path = os.environ.get("_MEIPASS2",os.path.abspath(".")) 

    return os.path.join(base_path, relative_path) 

... 


txt_data = open(resource_path("txt_files/some.txt")).read() 

は、あなたがそれを構築することを確認してくださいあなたのTXTファイルのリソースパスを取得するには、以下を使用し

a.datas += [ 
    ("/absolute/path/to/some.txt","txt_files/some.txt","DATA"), 
    ("/absolute/path/to/some2.txt","txt_files/some2.txt","DATA"), 
    ("/absolute/path/to/some3.txt","txt_files/some3.txt","DATA"), 
] 

を追加した後python -m PyInstaller my_target.specのように...あなたが編集した後に.pyファイルに対してpyinstallerを直接呼び出さないウルスペックファイルまたはそれはあなたの編集したファイルを上書きします...

+0

それは動作します!ありがとうございました! –

+0

あなたは私の[問題]を解決するのに役立つかもしれません(http://stackoverflow.com/questions/41073132/pyinstaller-app-is-accessing-txt-files-but-not-writing-to-them-works-before -ap)。 – Phillip

関連する問題