1

cx_Freeze を使用して Python 3.3 スクリプトをコンパイルしようとしています。このスクリプトは win32com.client を使用してMediaMonkeyを制御します。これは、直接実行すると完璧に機能します。しかし、コンパイルすると、この例外がスローされます。

Traceback (most recent call last):
  File "O:\Python\3\lib\site-packages\cx_Freeze\initscripts\Console3.py", line 27, in <module>
    exec(code, m.__dict__)
  File "test.py", line 6, in <module>
    sdb = win32com.client.DispatchWithEvents("SongsDB.SDBApplication", MMEventHandler)
  File "O:\Python\3\lib\site-packages\win32com\client\__init__.py", line 260, in
 DispatchWithEvents
    clsid = disp_class.CLSID
AttributeError: 'NoneType' object has no attribute 'CLSID'

を使用する非常に短いスクリプトをコンパイルしようとしても機能しませんwin32com.client

import win32com.client

class MMEventHandler:
    pass

sdb = win32com.client.DispatchWithEvents("SongsDB.SDBApplication", MMEventHandler)

そして、これは私の setup.py スクリプトです:

from cx_Freeze import setup, Executable


includes = []
excludes = []
packages = ['win32com', 'shlex', 'os', 'pythoncom', 'base64', 'tornado']
filename = "test.py"
setup(
    name = 'Test',
    version = '0.1',
    description = 'test',
    author = 'no',
    author_email = 'someting@my.org',
    options = {'build_exe': {
        'excludes':excludes,
        'packages':packages,
        'includes':includes
        }},
    executables = [Executable(filename, base = None, icon = None)])
4

1 に答える 1

2

要約すると、回答として再投稿します。

cx_Freeze 4.3.2 では、有効な Python 識別子である名前のモジュールのみをコピーするように変更しました (インポートできるようにするため)。ただし、win32com は次のようなモジュールに依存しているようです。

win32com\gen_py\E602ED16-8EF9-4F08-B09F-6F6E8306C51Bx0x1x0.py

ファイル名のハイフン ( -) は有効な Python 識別子ではないため、コピーされません。cx_Freezeの問題をオープンしました。当面の回避策は、SourceForge からダウンロードできる cx_Freeze 4.3.1 にダウングレードすることです。

また、これらのモジュールは、最初に COM オブジェクトをラップするときに生成されると思います。そのため、コードをフリーズする前に必ず実行してください。

于 2013-10-30T17:24:01.293 に答える