2016-12-01 18 views
0

cx_Freeze 5.0でPythonスクリプトをコンパイルするのが難しいです。 スクリプトが正しくコンパイルされ、EXEが生成されます。すべての要件が満たされる前に、一連のエラーメッセージがコンソールに出力されました。 すべての要件を追加した後、EXEを実行するとコンソールには出力されません。プログラムは何も印刷せずに静かに停止します。 のPythonから直接実行する場合は期待どおりに動作します:cx_Freezeが生成されましたEXEがコンソール出力を出力しません

>python testScript.py -p 12 aaa/bbb.ccc 
Test script with the following params: 
Namespace(input_file='aaa/bbb.ccc', param=12) 

私は問題は、私が使用しパッケージargparse に関連していると思います。

以下は、私が書いた小さなテストスクリプトとコンパイルスクリプトです。

from sys import exit, argv 
import os 
import argparse 

if __name__ == "__main__": 
    parser = argparse.ArgumentParser(prog=os.path.basename(argv[0]), 
     description='Command line parser test.') 
    parser.add_argument('input_file', 
         metavar='path/to/file', 
         help='path to source file)') 
    parser.add_argument('-p','--param', required=False, 
         metavar='par', 
         type=int, default=1, 
         help='test parameter') 

    try: 
     args = parser.parse_args() 
    except argparse.ArgumentError: 
     exit("Use -h option for help on using.") 

    if args.input_file is None: 
     parser.print_usage() 
     exit(0) 

#%% display parameters 
    print "Test script with the following params:" 
    print args 

cx_Freezeスクリプトコンパイル:プログラムはコンソールに何も印刷しないのはなぜ

from cx_Freeze import version, setup, Executable 
import sys 

print "Compilation using cx_Freeze version", version 

productName = "testScript" 

build_exe_options = {"packages": ["sys","os","argparse"]} 

exe_options = Executable(
          script = productName+".py", 
          targetName = productName+".exe", 
          base = None 
         ) 
setup(
     name=productName, 
     version="0.0", 
     author="mstankie", 
     description="test script", 
     options = {"build_exe": build_exe_options}, 
     executables=[exe_options] 
) 

を?

答えて

0

問題はargparseに関連していません...最後に、__name__の内容を印刷しようとしました。これは、Pythonインタプリタから直接実行する場合、変数は'__main__'が含まれている、ようだが、

変数__name__ cx_FreezeコンパイルEXEとして実行し、'nameofthegeneratedexe__main__'文字列が含まれています。 (上記のリストではありません5)ラインif __name__ == "__main__":を変更する

if "__main__" in __name__: 

は、問題を解決しました。

+0

これはcx_Freezeのバグで、今日はcx_Freeze 5.0.1のリリースで解決されました。 –

関連する問題