2011-10-24 16 views
4

私はPythonコードを単一のexeファイルにコンパイルしようとしていましたが、正しく実行できませんでした。Pythonコードを単一のexeファイルにコンパイル

  1. 私はpyInstallerのを試してみた、これは.specファイルです:罰金コンパイル

    # -*- mode: python -*- 
    a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programs\\toolbox.py'], 
         pathex=['C:\\Users\\Ronaldo\\Desktop\\Python\\pyinstaller']) 
    pyz = PYZ(a.pure) 
    exe = EXE(pyz, 
         a.scripts, 
         a.binaries, 
         a.zipfiles, 
         a.datas, 
         name=os.path.join('dist', 'program.exe'), 
         debug=False, 
         strip=False, 
         upx=True, 
         console=False) 
    

    pyInstallerの、働いていた単一のEXEファイルを作成し、 が、持っていなかった明らかに他のユーザー同じバージョンの pythonがインストールされている(2.7.2)ことができませんでした。何のエラーも与えない、それは単に起動しません。私はそれをいくつかの友人に を送信して試してみたが、仮想マシンでも試してみた。

  2. 試したpy2exe。コンパイル時に(ライブラリの隣にあるすべてのライブラリ とそれ以外のファイル)、正常に動作します。私は を1つのファイルにコンパイルしようとしましたが、コンパイルされたexeファイルによって " toolbox.exeが動作を停止しました"というエラーが表示されました。ここでは、エラー報告、 は、念のためですが、役に立つかもしれない:

    Problem signature: 
        Problem Event Name: APPCRASH 
        Application Name: toolbox.exe 
        Application Version: 0.0.0.0 
        Application Timestamp: 49180193 
        Fault Module Name: StackHash_0a9e 
        Fault Module Version: 0.0.0.0 
        Fault Module Timestamp: 00000000 
        Exception Code: c0000005 
        Exception Offset: 01b61fcb 
        OS Version: 6.1.7601.2.1.0.256.1 
        Locale ID: 1033 
        Additional Information 1: 0a9e 
        Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
        Additional Information 3: 0a9e 
        Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 
    

    setup.pyファイルには、次のとおりです。

    from distutils.core import setup 
    import py2exe, sys, os 
    
    sys.argv.append('py2exe') 
    
    setup(
        options = {'py2exe': {'bundle_files': 1}}, 
        windows = [{'script': "toolbox.py"}], 
        zipfile = None, 
    ) single.py file: 
    

    そして、ここでsingle.pyだ:

    import os, sys, ctypes 
    
    ctypes.windll.user32.MessageBoxA(0, 
        "curdir: %s\nexedir: %s\nsys.winver: %s" % (
         os.path.abspath(os.curdir), 
         os.path.abspath(os.path.dirname(sys.argv[0])), 
         sys.winver, 
        ), "%s - Message" % os.path.basename(sys.executable), 0x30 
    ) 
    

私が書いたプログラムは、tkinter、sys、random、およびwin32clipboard(pywin)モジュールを使用します。 私は何が間違っていますか? 他の優れたコンパイラはありますか?

更新:Joëlのヒントで、私はデバッグとコンソールモードでコンパイルしました。 Python 2.7を使用していないユーザーにはまだ機能しませんでした。これはエラーメッセージです:

C:\Users\XXXXX\Desktop>program.exe 
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe 
Extracting binaries 
Setting up to run child 
Setting magic environment var 
Creating child process 
Waiting for child process to finish... 
Found embedded PKG: C:\Users\XXXXX\Desktop\program.exe 
workpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/ 
manifestpath: C:/Users/XXXXX/AppData/Local/Temp/_MEI14042/program.exe.manifest 
Activation context created 
Activation context activated 
C:\Users\XXXXX\AppData\Local\Temp\_MEI14042\python27.dll 
Manipulating evironment 
PYTHONPATH=C:/Users/XXXXX/AppData/Local/Temp/_MEI14042;C:/Users/XXXXX/Desktop 
importing modules from CArchive 
extracted iu 
extracted struct 
extracted archive 
Installing import hooks 
outPYZ1.pyz 

私は本当にこれが可能な答えのための助けとして役立つことを願っています。

+1

「実行できませんでした」 - どのようなエラーが表示されていますか? –

+0

大きなサードパーティライブラリを使用していますか?特に、Tkinterにはpyinstallerで動作する特別なフラグが必要です – Shish

+0

@PetrViktorin Viktorinエラーはまったくありません。それだけで実行されません。 – Thurax

答えて

2

私の2セント:debugオプションを使用してテストを行いましたか?PyInstaller

ちょうどあなたのspecファイルを更新します。

exe = EXE(pyz, 
      [...] 
      debug=True, 
      [...]) 

(注:多数のメッセージボックスを避けるために、あなたはコンソール出力を設定することもできます。console=True

多分それはいくつかの有用なデータが返されます。この場合、出力があれば教えてください(もしあれば)。


pyInstallerのは、あなたのモジュールの依存関係を解決するかどうか、依存関係の依存関係が忘れられる可能性があるので、あなたが得る出力によると、これは、非常に共通の問題です。あなたのケースでは

Tclが欠落している、これはいくつかのTkinterライブラリが必要とする:あなたはここで見てみる必要があります。Python, Pyinstaller creating shortcuts in windows

ドキュメントによると:

Makespec.pyにエラボレーション

、このサポートされるコマンドラインは次のとおりです。パイソンMakespec.py許可オプションは、[OPTS] [...]:

[...]

-K、 - -tkには、展開時にTCL/TKが含まれます。

この引数で試してみて、specファイルの影響を確認してください。私はそれがAnalysisやEXE関数で考慮されているモジュールの追加だと思う。

+0

私はそれをしました、そして、それはまだpythonがインストールされていないコンピュータでは実行されませんでした。これは私が得るエラーです: http://pastebin.com/fg5JuhqR 私はデバッグモードを使用し、また "console = True" – Thurax

+0

これは便利です。それに応じて私の答えを更新しました。 –

関連する問題