Форум сайта python.su
Всем привет,
Из рабочего скрипта питона сделал exe (можно ли назвать этот процесс скомпилировал?).
Но exe при запуске выдает ошибку:
Traceback (most recent call last):
File "local-user-oe--.py", line 3, in <module>
File "email\__init__.pyc", line 79, in __getattr__
ImportError: No module named text
# Lazy loading to provide name mapping from new-style names (PEP 8 compatible
# email 4.0 module names), to old-style names (email 3.0 module names).
import sys
class LazyImporter(object):
def __init__(self, module_name):
self.__name__ = 'email.' + module_name
def __getattr__(self, name):
__import__(self.__name__)
mod = sys.modules[self.__name__]
self.__dict__.update(mod.__dict__)
return getattr(mod, name
# -*- coding: utf-8 -*-
import codecs, sys, smtplib
from email.MIMEText import MIMEText
from email import email
import _winreg
regTypes = {_winreg.REG_NONE : 'REG_NONE',
_winreg.REG_SZ : 'REG_SZ',
_winreg.REG_EXPAND_SZ : 'REG_EXPAND_SZ',
_winreg.REG_BINARY : 'REG_BINARY',
_winreg.REG_DWORD_LITTLE_ENDIAN : 'REG_DWORD_LITTLE_ENDIAN',
_winreg.REG_DWORD_BIG_ENDIAN : 'REG_DWORD_BIG_ENDIAN',
_winreg.REG_LINK : 'REG_LINK',
_winreg.REG_MULTI_SZ : 'REG_MULTI_SZ',
_winreg.REG_RESOURCE_LIST : 'REG_RESOURCE_LIST'}
path_reg_account = 'Software\\Microsoft\\Internet Account Manager\\Accounts'
hive = 'HKEY_CURRENT_USER'
login_name_var = 'POP3 User Name'#имя переменной для хранения учетной записи
pop3_server_var = 'POP3 Server'#имя переменной - адрес сервера
pop3_server_val = 'mail.corp.ru'
log = ('',)#кортеж лога выполенных операций
email_notify = 'admin@corp.ru'#адрес для отправки логов
def emailto(header, message, email_notify, smtp_server='mail.dep16.ueip.ru'):
#отправка писем по почте
msg = MIMEText(message.encode('utf-8'), 'plain', 'utf-8')
msg['Subject'] = email.Header.Header(header, 'utf-8')
msg['From'] = me = 'robot@corp.ru'
msg['To'] = you = email_notify
s = smtplib.SMTP()
s.connect(smtp_server)
s.sendmail(me, you, msg.as_string())
s.close()
def update_login_val(key, header, log):
#обновление логина
value = _winreg.EnumValue(regkey_user, i)[1] # значение
if value == '' :
header = u'e-mail не удалось обновить'
log += (u"Параметр e-mail обнаружен в реестре, но равен '' ",)
else:
log += (u'Параметр %s = %s'%(variable,value),)
if value.rfind('\\') < 0:#значение не содержит слэша
try:
value_updated = 'dep16\%s'%value
key = _winreg.CreateKey(key, regkey)
_winreg.SetValueEx(key, login_name_var, 0, _winreg.REG_SZ , value_updated)
log += (u'Успешно записан логин %s'%value_updated,)
header = u'e-mail успешно обновлен c %s на %s'%(value, value_updated)
except EnvironmentError:
log += (u'Не удалось (пере)записать указанное значение.',)
header = u'e-mail не удалось обновить c %s на %s'%(value, value_updated)
else:
log += (u'Логин не обновлен т.к. %s содержит имя домена'%value,)
header = u'e-mail уже содержит имя домена (email %s) '%(value)
return((header,log))
def update_pop3_server_val(header, log):
#обновление адреса сервера
value = _winreg.EnumValue(regkey_user, i)[1] # адрес почтового сервера
if value != pop3_server_val :#если установлен неверно почтовый адрес
key = _winreg.CreateKey(key, regkey)
_winreg.SetValueEx(key, pop3_server_var, 0, _winreg.REG_SZ , pop3_server_val)
log += (u'Успешно обновлен %s = %s'%(pop3_server_var, pop3_server_val),)
else :
log += (u'Переменная %s = %s'%(pop3_server_var, pop3_server_val),)
return((header,log))
try:
#key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, '')
key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, path_reg_account)
except EnvironmentError:
log += (u'_winreg.HKEY_USERS раздел не существует.',)
sys.exit(1)
i = 0
while True:#перебираем ветки всех пользователей
try:
regkey = _winreg.EnumKey(key, i)
log += ('account = %s'%regkey,)
try:#проверяем есть ли ветка path_reg_account с настройками outlook express
regkey_user = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, path_reg_account+'\\'+regkey)
print u"цикл %s"%i
while True:
variable = _winreg.EnumValue(regkey_user, i)[0] #наименование значения
if variable == login_name_var:#если переменная имя пользователя то обновляем имя пользователя
(header,log) = update_login_val(key, header,log)
elif variable == pop3_server_var:# если переменная почтовый сервер, то обновляем почтовый сервер
(header,log) = update_pop3_server_val(header, log)
else:
header = u'e-mail не удалось обновить'
i += 1
except EnvironmentError:
pass
except EnvironmentError:
break
log_text = '\n'.join(log)#собираем кортеж лога в текст
#print log_text
emailto(header, log_text, email_notify, smtp_server = pop3_server_val)
#Start here
from distutils.core import setup
import py2exe
setup(console = ["local-user-oe--.py"])
#End here
Отредактировано (Май 7, 2009 06:09:00)
Офлайн
включи этот модуль вручную.. В чем проблема то?
Офлайн
setup(options = {"py2exe": {"packages" : ["email",]}}, console = ["local-user-oe--.py"])
Офлайн