Найти - Пользователи
Полная версия: py2exe win32com
Начало » Python для новичков » py2exe win32com
1
diego
Доброго времени суток

при попытке создать exe файл из вот такого скрипта
# coding: utf-8
import os
oo= os.path.abspath(os.curdir)
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')

wb2 = excel.Workbooks.Open(oo+u'\\Еженедельный отчет 2011 год (6 неделя)test.xls')
wb2.Close(SaveChanges=1)
del excel
setup.py
from distutils.core import setup
import py2exe, sys, os

sys.argv.append('py2exe')

setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "module2.py"}],
zipfile = None,
)
получается экзешник, но при запуске получаю вот такую ошибку

Traceback (most recent call last):
File "module2.py", line 16, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "win32com\__init__.pyc", line 5, in <module>
File "zipextimporter.pyc", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32api.pyd
Подскажите решение проблемы или хотя бы наведите на мысль
igor.kaist
bundle_files не всегда, к сожалению, нормально работает с dll'ками.
P.S. Кстати, в большинстве случаях для работы с excel, удобнее использовать пакеты xlrd (для чтения) и xlwt (для создания). Они не требуют установленного excel и вообще, кроссплатформенны.
lavrton
Если вместо
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
написать
from win32com.client.dynamic import Dispatch
excel = Dispatch('Excel.Application')
А так же вместо py2exe использовать cx_Freeze (http://cx-freeze.sourceforge.net/). Мне кажется проект более живой.
import sys

from cx_Freeze import setup, Executable
sys.argv.append( 'build' )

buildOptions = dict(
build_exe = 'dist',
compressed = True,
optimize = 2,
)
setup(
name = "OutApp",
version = '2.0',
options = dict( build_exe = buildOptions ),
executables = [Executable( 'script.py')]
)

print( "Done" )
У меня ваш пример не работал. (с той же ошибкой) Этот работает.
pyuser
Эта проблема вылезла в python 2.7 при попытке собрать что-нибудь содержащее pywin32 :(.
Добавьте в setup параметр dll_excludes = и будет Вам счастье :)
Или используйте вместо pywin32 ctypes (comtypes вместо win32com)

ЗЫ. правда у меня так и не получилось обрабатывать COM-события (comtypes)
ЗЫЫ. если Вам требуется только чтение/запись xls-файлов, то прислушайтесь к совету igor.kaist, это действительно гораздо удобнее
diego
igor.kaist
bundle_files не всегда, к сожалению, нормально работает с dll'ками.
P.S. Кстати, в большинстве случаях для работы с excel, удобнее использовать пакеты xlrd (для чтения) и xlwt (для создания). Они не требуют установленного excel и вообще, кроссплатформенны.
Пользовался - но мне нужно записывать данные в уже имеющийся файл, который будет проблематично создавать через xlwt (присутствуют элементы управления, чтото не нашёл как с ними там управлятся)

lavrton
этот код работает, но возникло неожиданное препятствие - при изменении директории
вот этот код
oo= os.path.abspath(os.curdir)
выдаёт папку C:\Documents and Settings\user

куда бы я не ложил экзешник
как так?
Андрей Светлов
os.getcwd()
diego
Андрей Светлов
os.getcwd()
Создам ка я новый пост
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB