ImportError: ошибка загрузки DLL при импорте IfxPy на Windows с Python3 .8 - PullRequest
2 голосов
/ 06 августа 2020

Python3 .8 изменило поведение на Windows: он не ищет dll в PATH, и необходимо добавить необходимый путь с помощью os.add_dll_directory, поэтому модуль можно импортировать без ошибок. Мне нужно использовать модуль OpenInformix / IfxPy, и уже есть открытая проблема для этого .

Тем временем я пытаюсь исправить это самостоятельно, поэтому я добавил следующий код в начало IfxPy.py

if os.name == 'nt' and hasattr(os, 'add_dll_directory'):
    informixdir = os.getenv('INFORMIXDIR', None)
    if informixdir and os.path.exists(informixdir):
        os.add_dll_directory(os.path.join(informixdir, "bin"))

, но после python setup.py install (я очищаю предыдущую сборку и снова собираю ее), установленный IfxPy.py содержит только __bootstrap__ функцию. В журнале установки указано, что IfxPy.py создается во время установки:

...
byte-compiling build\bdist.win-amd64\egg\IfxPyDbi.py to IfxPyDbi.cpython-38.pyc
creating stub loader for IfxPy.cp38-win_amd64.pyd
byte-compiling build\bdist.win-amd64\egg\IfxPy.py to IfxPy.cpython-38.pyc
creating build\bdist.win-amd64\egg\EGG-INFO
...

Итак, где я должен поместить этот код, чтобы import IfxPy не сработал?

1 Ответ

1 голос
/ 09 августа 2020

Добавьте его перед импортом модуля IfxPy:

import os
if 'INFORMIXDIR' in os.environ:
    os.add_dll_directory(os.path.join(os.environ['INFORMIXDIR'],"bin"))
import IfxPy
        
ConStr="Driver={IBM INFORMIX ODBC DRIVER};SERVER=ids1210;DATABASE=stores7;"
conn=IfxPy.connect(ConStr,"informix","ximrofni")
if conn:
      stmt = IfxPy.exec_immediate(conn, "SELECT 'T'::boolean from table(set{1})")
      res = IfxPy.fetch_tuple(stmt)            
      if res[0]:
         print ("0 is true")
      else:
         print ("0 is false")     
                 
...