Python 3.x ImportError:在使用Python3.8的Windows上导入IfxPy时DLL加载失败

Python 3.x ImportError:在使用Python3.8的Windows上导入IfxPy时DLL加载失败,python-3.x,windows,informix,Python 3.x,Windows,Informix,Python3.8改变了Windows上的行为:它不在路径中查找dll,需要使用os添加必要的路径。添加dll\u目录,这样模块就可以无错误地导入。我需要使用OpenInformix/IfxPy模块,而且已经有了 和此同时,我试图自己修复它,所以我在代码的开头添加了以下代码 但是在python setup.py安装之后(我清理了以前的构建并重新构建了它),安装的IfxPy.py只包含\uuuuuu引导功能。 安装日志表明安装过程中生成了IfxPy.py: ... byte-compiling b

Python3.8改变了Windows上的行为:它不在路径中查找dll,需要使用
os添加必要的路径。添加dll\u目录
,这样模块就可以无错误地导入。我需要使用OpenInformix/IfxPy模块,而且已经有了

和此同时,我试图自己修复它,所以我在代码的开头添加了以下代码

但是在
python setup.py安装之后(我清理了以前的构建并重新构建了它),安装的
IfxPy.py
只包含
\uuuuuu引导功能。
安装日志表明安装过程中生成了
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
...

因此,我应该将此代码放在哪里,以便导入IfxPy不会失败?

在导入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")     
                 

对源代码进行更改后,您需要使用“python setup.py build”从源代码构建它(而不仅仅是安装它)。看一下说明书,是我做的。我更新了问题的更多细节。谢谢。这很有效。但我希望这可以在模块级解决(避免更正所有使用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")