首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法加载*.pyd文件,但DependancyWalker显示为空,并且ProcMon显示它已加载

无法加载*.pyd文件,但DependancyWalker显示为空,并且ProcMon显示它已加载
EN

Stack Overflow用户
提问于 2011-04-15 02:05:56
回答 3查看 9K关注 0票数 4

我正在尝试使用Python加载*.pyd,但收到了众所周知的“导入错误: DLL加载失败:无法找到指定的过程”。错误。

我已经做了以下工作:

1.)已使用依赖关系遍历程序调查了*.pyd。GPSVC.DLL和IESHIMS.DLL是缺失的,但延迟加载,IEFRAME.DLL也是缺失导出,但也是延迟加载的。据我所知,它们没有被使用,而且无论如何都是延迟加载,所以它们不应该是问题。

2.)在ProcMon监视的情况下,在python命令窗口中对foo.pyd执行了"import foo“。ProcMon在"foo.pyd“上显示事件"LoadImage”,结果成功。

这似乎意味着*.pyd文件加载正确。

那么我错过了什么。我的windows诊断程序告诉我一切正常,但是python告诉我东西无法加载(通常是由于缺少dll或符号)。

想法?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-15 04:07:43

.pyd文件是否与您正在使用的Python版本相同?为错误的.pyd版本加载Python文件可能会产生该错误消息。

Dependency Walker可以向您显示它链接到哪个pythonNN.dll。

票数 4
EN

Stack Overflow用户

发布于 2011-04-15 07:29:30

如果您有一个文件foo.pyd,为了使import foo成功,必须有一个可从外部访问的名为initfoo的函数。如果它存在,Dependency Walker将显示它(通常是唯一的函数)。Python需要调用initfoo来初始化foo模块。

注意:如果这就是问题所在,我希望得到更明确的错误消息:

代码语言:javascript
复制
>>> import fubar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initfubar)
>>>

你说你正在“尝试加载一个*.pyd文件”。这只是一种奇怪的描述import foo的方式,还是别的什么?

是你创建了pyd吗?如果不是,那是谁做的?你问过他们了吗?这个pyd是否可以在web上使用,以便其他人可以尝试加载/导入它?

票数 1
EN

Stack Overflow用户

发布于 2011-04-16 22:21:48

好的,这是答案:

windows诊断程序(相关、procmon等)显示DLL (或pyd)加载正常。

Python显示它不能正常加载。

我发现windows工具引用的是隐藏在我的C:\Window\SysWOW64文件夹中的另一个Python26.dll。

第二个Python26.dll (在SysWOW64中找到)的符号在主要python26.dll (由windows python安装程序安装,位于C:\python26中)中缺失。

我的*.pyd文件显然需要这个符号"_PyByteArray_empty_string“。

因此,当通过windows诊断程序加载时,找到了SysWOW64 dll,并且正确加载了*.pyd。从python加载时,发现C:\Python26\中的dll,符号丢失,加载失败。

这就是问题出现的原因。现在的问题是:为什么Python26.dll有两个版本,一个有_PyByteArray_empty_string,一个没有?

我使用的是Python 2.6.6。也许这个符号在2.6.6中被删除了,但在一些旧的2.6.x版本中出现了?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5667556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档