Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2011 22:43:22

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

py2exe win32com

Доброго времени суток

при попытке создать 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
Подскажите решение проблемы или хотя бы наведите на мысль



Офлайн

#2 Март 1, 2011 22:50:48

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

py2exe win32com

bundle_files не всегда, к сожалению, нормально работает с dll'ками.
P.S. Кстати, в большинстве случаях для работы с excel, удобнее использовать пакеты xlrd (для чтения) и xlwt (для создания). Они не требуют установленного excel и вообще, кроссплатформенны.



Офлайн

#3 Март 2, 2011 05:22:07

lavrton
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  1  -
Профиль   Адрес электронной почты  

py2exe win32com

Если вместо

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" )
У меня ваш пример не работал. (с той же ошибкой) Этот работает.



Отредактировано (Март 2, 2011 05:23:35)

Офлайн

#4 Март 2, 2011 07:21:32

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

py2exe win32com

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

ЗЫ. правда у меня так и не получилось обрабатывать COM-события (comtypes)
ЗЫЫ. если Вам требуется только чтение/запись xls-файлов, то прислушайтесь к совету igor.kaist, это действительно гораздо удобнее



Отредактировано (Март 2, 2011 07:50:24)

Офлайн

#5 Март 2, 2011 13:17:45

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

py2exe win32com

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

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

куда бы я не ложил экзешник
как так?



Офлайн

#6 Март 2, 2011 13:20:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

py2exe win32com

os.getcwd()



Офлайн

#7 Март 2, 2011 15:07:32

diego
От:
Зарегистрирован: 2010-09-14
Сообщения: 78
Репутация: +  0  -
Профиль   Отправить e-mail  

py2exe win32com

Андрей Светлов
os.getcwd()
Создам ка я новый пост



Отредактировано (Март 2, 2011 15:16:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version