Вызов функции модуля MS Access из Python после сбоя при компиляции с py2exe - PullRequest
2 голосов
/ 05 марта 2012

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

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

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

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)

Вот код Python. Проблема с последней строкой в ​​этом блоке. Datatype = 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.

Спасибо Simon

1 Ответ

1 голос
/ 10 сентября 2012

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

...