21

PyQt4 を使用して、Python 3.1 でかなり単純なアプリケーションを作成しました。完了したら、どちらもインストールされていないコンピューターにアプリケーションを配布したいと思います。

私はほとんど Windows プラットフォームに関心があるので、私の目標は 1 つの実行可能ファイルと、最終的にいくつかのリソース ファイルと .dll を用意することです。

いろいろ調べた結果、たどり着いたのは

  • py2exeはバージョン 2.7 までの Python のみをサポートします
  • pyinstallerはバージョン 2.6 までの Python のみをサポートします
  • 正常にビルドされたバイナリを実行しようとすると、次のエラーが発生し続けるため、 cx_Freezeは機能しません。

Y:\Users\lulz\build\exe.win32-3.1>system_shutdown.exe
Traceback (most recent call last):
File "Y:\Program Files (x86)\Python\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in exec(code, m.__dict__)
File "Y:/Users/lulz/Documents/Coding/Python3/projects/System Shutdown/system_shutdown.pyw", line 5, in from PyQt4 import QtCore
File "ExtensionLoader_PyQt4_QtCore.py", line 16, in AttributeError: 'NoneType' object has no attribute 'modules'

したがって、私の問題は基本的に2つの問題です。

  1. 私の設定でバイナリをビルドする cx_Freeze 以外の方法はありますか?
  2. そうでない場合、cx_Freeze の問題は何でしょうか?

cx_Freeze の呼び出し、distutils セットアップ スクリプトなど、必要に応じて 2 番目の問題に関する詳細情報を提供できます。

すでにご協力とコメントをありがとうございます。

4

2 に答える 2

13

これは、cx_Freeze パッケージの freeze.py に 1 行のコードを追加することで修正できます。

ここで説明されています: http://www.mail-archive.com/cx-freeze-users@lists.sourceforge.net/msg00212.html

少なくとも私にとってはうまくいきました:)

乾杯、アルマー

于 2009-11-19T20:18:38.830 に答える
-1

Python 3.3 以降の場合、ここに適切な解決策があります: py2exe - 単一の実行可能ファイルを生成します。

py2exe をインストールします。

pip install py2exe

次に、「your_script.py」ファイルのほかに、次の「Make_exe.py」ファイルを追加します。

from distutils.core import setup
import py2exe, sys

class Make_exe():
    def __init__(self, python_script):
        sys.argv.append('py2exe')

        setup(
            console=[{'script': python_script}],
            zipfile = None,
            options={
                'py2exe': 
                {
                    'bundle_files': 1, 
                    'compressed': True,
                    # Add includes if necessary, e.g. 
                    'includes': ['lxml.etree', 'lxml._elementpath', 'gzip'],
                }
            }
        )

if __name__ == '__main__':
    Make_exe('your_script.py')

また、「your_script.py」を python で実行するたびに「your_script.exe」として再構築する場合は、そのメインに追加できます。

import subprocess
import sys

if __name__ == '__main__':
    currentFile = sys.argv[0]
    if currentFile.lower().endswith(".py"):
        exitCode = subprocess.call("python Make_exe.py")
        if exitCode==0 :
            dirName = os.path.dirname(currentFile)
            exeName = os.path.splitext(os.path.basename(currentFile))[0] + '.exe'
            exePath = dirName + "/dist/" + exeName
            cmd = [exePath] + sys.argv[1:]
            print ("Executing command:\n %s" % cmd)
            exitCode = subprocess.call(cmd)
        sys.exit(exitCode)
    else:
        print ("This will be executed only within the new generated EXE File...")
于 2016-01-22T00:51:12.540 に答える