2012-03-05 1 views
2

Я запускаю код python ниже в течение примерно года. Но я собираюсь перейти на новую работу. Чтобы облегчить работу отдела, я ухожу, я хочу скомпилировать этот код в файл .exe.Вызов функции модуля доступа MS от Python после компиляции с py2exe не удается

Я попытался скомпилировать файлы с Python 2.5 и 2.7 с теми же результатами.

Но когда при запуске файла ехе я получаю следующую ошибку

H:\development\DMS_Import_Data\dist>import_data.exe 
Run Live or Development Import (L = Live, D = Dev, X = Exit):l 
5:3:2012 10:56 Opening Live Database... 
5:3:2012 10:56 Assuming Database already open 
5:3:2012 10:56 Importing latest DMS Data... 
Traceback (most recent call last): 
File "import_data.py", line 79, in <module> 
File "import_data.py", line 46, in run 
File "<COMObject Access.Application>", line 2, in run 
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, u'You made 
an illegal function call.', None, -1, -2146820336), None) 

Вот код питона. Проблема с последней строки в этом блоке типа данных = conn.run («импорт данных»)

import win32com.client 
import pythoncom 
import time 
import datetime 
import os 
import string 
class ProcessDMSData: 
    sleepTime = 3600 
    ref_date = '' 

    def set_ref_date(self,ref_date): 

     self.ref_date = ref_date 



    def run(self): 

     run_type = "" 

     while True: 
      pythoncom.CoInitialize() 
      check_values = ["L", "D", "X"] 
      while run_type.upper() not in check_values:   
       run_type = raw_input ("Run Live or Development Import (L = Live, D = Dev, X = Exit):") 
      if run_type.upper() == "L": 

       update_type = "Live" 

       database_path = "G:\\Eurofighter programme Management\\1.PM Reporting\\Production Tracking Database\\booking_planeset_tracker_data.mdb" 

      elif run_type.upper() == "D": 

       update_type = "Development" 

       database_path = "G:\\Eurofighter programme Management\\1.PM Reporting\\Production Tracking Database\\dev_dms_tracker_data.mdb" 

      elif run_type.upper() == "X": 

       quit() 
      print "%s Opening %s Database..." % (self.get_date_time(), update_type) 

      conn=win32com.client.Dispatch('Access.Application') 

      try: 

       conn.OpenCurrentDatabase(database_path) 

      except: 

       print "%s Assuming Database already open" % (self.get_date_time()) 
       pass 

      print "%s Importing latest DMS Data..." % (self.get_date_time()) 

      datatype = conn.run("import_data") 

Может кто-нибудь помочь с тем, почему это работает работает как скрипт в Python, но не тогда, когда он был составлен в Exe.

Благодаря Саймон

+0

Вы пытались использовать другой exe-packer, такой как pyinstaller? –

+0

Следуя совету Juri Robi, я загрузил Pyinstaller и скомпилировал exe. Это отлично работало без каких-либо корректировок. Я все еще не знаю, почему py2exe не работает, но для меня Pyinstaller - отличный новый инструмент для меня, который я буду использовать снова в будущем. Саймон – PrestonDocks

ответ

1

После консультации с Juri Роби, я скачал Pyinstaller и составил ех. Это отлично работало без каких-либо корректировок. Я все еще не знаю, почему py2exe не работает, но для меня Pyinstaller - отличный новый инструмент для меня, который я буду использовать снова в будущем.

Смежные вопросы