2016-11-03 7 views
0

Я попытался скомпилировать свою программу в exe с py2exe. К сожалению, как я использую win32com копировать диаграммы из Excel и вставлять их в PowerPoint с помощью (Shapes.PasteSpecial(ppPasteOLEObject), я постоянно получаю эту ошибку:py2exe & win32 Ошибка OLEObject

File "win32com\client\__init__.pyc", line 170, in __getattr__ 
AttributeError: ppPasteOLEObject`. 

Googling не очень помогло. Скрипт отлично работает, когда я запускаю его на python, поэтому я знаю, что проблема связана с win32com. Использование makepy.py для включения typelib также не помогло, но, возможно, мой setup.py просто ошибается. Так вот:

import sys 
from distutils.core import setup 
import py2exe 
from glob import glob 
from os.path import normpath 
import matplotlib 

sys.setrecursionlimit(5000) 
data_files=[("Microsoft.VC90.CRT",glob(normpath(
    r'C:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT/*.*'))), 
    ("images",glob(normpath("images/*.PNG"))), 
    ("ppttemplate",glob(normpath("ppttemplate/*.pptx")), 
    (".",normpath("C:/windows/system32/ole32.dll")), 
    (".",normpath("C:/Anaconda2/envs/py27/Library/bin/MSVCP90.dll"))) 
    ] 
data_files.extend(matplotlib.get_py2exe_datafiles()) 

setup(
    data_files=data_files, 
    console=['Main.py'], 
    options={"py2exe":{"includes":["lxml.etree","lxml._elementpath","gzip", 
         "sip","PyQt4.QtGui","PyQt4.QtCore","matplotlib"], 
         "excludes":["Tkinter"], 
         "typelibs":[('{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}', 0, 2, 8), 
            ('{00020430-0000-0000-C000-000000000046}', 0, 2, 0)] 
            } 
            } 
            ) 

Заранее благодарим за вашу помощь!

+0

В течение многих лет я использовал Py2exe, наконец, после бесчисленных ошибок и проблем, я начал использовать PyInstaller, и это было намного лучше, попробуйте использовать https://mborgerson.com/creating-an-executable-from-a-python-script и посмотрите, исправляет ли это проблему, если это исправлено, вы настроены, если это не может быть связано с тем, как он выполняется, и как он не упакован (IE, python работает в одном каталоге или с разными разрешениями) –

ответ

0

Получил это! Нужно просто включить соответствующие DLL и установить skip_archive=True ... (я включил все, о чем жаловался py2exe).

Добавляя:

sys.path.append("C:\\Program Files\\Microsoft VisualStudio9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT") 
sys.path.append("C:\\windows\\system32") 

до data_files линии и добавляя все system32 к data_files и добавление skip_archive=True внутри py2exe: это сработало! Надеюсь, он функционирует и на разных компьютерах ...

Руководство, которое я использовал, было на сайте [py2exe] (http://www.py2exe.org/index.cgi/IncludingTypelibs)!