импорт cx_oracle завершается с ошибкой, когда скрипт python запускается как служба win32

Я написал скрипт Python, который должен работать как служба Windows, создав подкласс win32serviceutil.ServiceFramework. В скрипте используется модуль cx_oracle.

Когда я запускаю службу в режиме отладки ( python DLOGprod.py debug ), все работает нормально. Но когда я пытаюсь запустить службу ( python DLOGprod.py start ), импорт модуля cx_oracle завершается с ошибкой:

import cx_Oracle ImportError: Ошибка загрузки DLL: указанный модуль не найден.

Я просмотрел файл cx_oracle.pyd с помощью обходчика зависимостей, и он сообщает о двух отсутствующих dll-файлах MSVCR90.DLL и IESHIMS.DLL.

У меня есть следующая установка:

  • питон 2.6.6
  • pywin32-214
  • cx_oracle_5.0.4-11g

Любая помощь будет высоко оценена

отметка


person mscheufe    schedule 13.05.2011    source источник
comment
Что такое PYTHONPATH при запуске службы? Каково значение sys.path? Возможно, вам придется написать крошечную двухстрочную службу только для печати значений в файл, чтобы вы могли поделиться ими с нами.   -  person S.Lott    schedule 13.05.2011


Ответы (1)


Я решил свою проблему. Основная причина заключалась в том, что я только добавил путь к клиентскому программному обеспечению Oracle в переменную user's PATH. После добавления его в общесистемную переменную PATH все работает нормально.

Чтобы устранить проблему, я выполнил следующую процедуру:

  • загрузил утилиту обозревателя процессов http://www.microsoft.com/technet/sysinternals/utilities/filemon.mspx
  • определил PID моей службы sc queryex [имя службы]
  • отфильтровано после PID в исследуемом процессе
  • увидел, что pythonservice.exe не может найти OCI.dll
  • искал OCI.dll в своей системе

В этот момент все было ясно.

отметка

person mscheufe    schedule 16.05.2011
comment
Привет, добро пожаловать в SO. Пожалуйста, когда ответ решит вашу проблему (даже если это ваш ответ), отметьте его как принятый (нажмите галочку). - person Loda; 17.05.2011