我正在尝试让一个python程序在Windows机器上运行。 我把它放在我的开发窗口框上,但是当我将它转移到另一个窗口框时,我一直得到:
ImportError:DLL加载失败:%1不是vaild Win32应用程序
跟踪暗示它在导入时遇到问题,它基本上经历了几个内部python程序(相互导入)然后进入ArcPy领域。最终它似乎尝试的最后一个是arcgisscripting。
如果我在那个盒子上,如果输入翻译并输入“import arcgisscripting”,我没有错误(只是一个新的>>>光标),所以我开始认为这个错误有点误导。如果(例如)python代码编译为64位并且您尝试在32位python上运行,我会读到这个错误。
一位同事建议,如果python找不到一些必要的代码,有时会发生错误。所以我检查并做了SET语句,现在PATH和PYTHONPATH变量似乎是等价的。我仍然得到这个错误,不知道该怎么做。我不想做任何事情,比如卸载问题框中的东西并重新安装它。该框是共享资源。
答案 0 :(得分:0)
如果我将DependencyWalker指向该文件,则表示找不到该依赖项的几个依赖项。
所以似乎解决方案是: 1)找到ImportError标记的最后一个文件 2)在文件系统上查找其.pyd文件 3)在.pyd上运行DependencyWalker以找出缺少的内容
答案 1 :(得分:0)
我最近从经历同样的苦难中吸取了一些教训。
首先要运行几个检查。
检查所有组件是否在同一操作系统基础上运行,64位或32位。如果您的机器是64位安装,请确保您有64位版本的python。安装Oracle Instant Client也是如此;如果这是您的机器运行的话,它也需要64位。
如果要使exe实际上与软件无关,则必须打包oracle即时客户端并设置系统路径变量。
我最简单的运行是py_installer,它开箱即用,但我仍在努力包含即时客户端安装程序。
导入cx_oracle之前设置这些系统路径
# instantClientPath is the path to the instant client folder
os.environ["PATH"] = instantClientPath+";"+os.environ["PATH"]
os.environ["ORACLE_HOME"] = instantClientPath
os.environ["LD_LIBRARY_PATH"] = instantClientPath
os.environ["TNS_ADMIN"] = instantClientPath
os.environ["NLS_LANG"] = "american_america.WE8MSWIN1252"