我有一个已编译的.pyd模块,它依赖于其他几个dll(pythonmapscript和MapServer),我正尝试在windows10的IPython中使用它。设置步骤如下:
ImportError: DLL load failed: The specified procedure could not be found.
到目前为止的调试步骤:
C:\Users\user\.ipython
和'c:\virtualenvs\mapscript-jupyter3\lib\site packages\ipython\extensions',但在其他方面是相同的。删除这些路径不会更改错误。你知道吗对于新创建的venvs,在python2.7和python3.6中都会出现同样的问题。 这个问题似乎与ipython notebook can import a pyd module but the python interpter can't相反
所以我的问题是IPython对Python环境做了什么,这会导致与标准Python的差异,并导致错误?你知道吗
这花了很长时间才找到问题所在。使用Process Monitor很容易发现任何丢失的dll。但是在本例中,找到了所有依赖的dll,但其中一个没有我尝试导入的.pyd文件(或关联的dll)使用的函数。你知道吗
我设法将测试范围缩小到导致错误的两个命令—直接加载PYD。你知道吗
我尝试在虚拟环境内外删除/修改路径,py2和py3都产生了相同的错误。你知道吗
然后我试着运行Process Monitor并比较结果——除了ipython为交互式shell加载了许多额外的Python库之外,没有什么特别之处。你知道吗
processmonitor为每个事件提供了一个方便的属性选项,它还显示了为流程加载的模块。这些可以排序,然后复制到剪贴板。你知道吗
我能够比较工作的Python进程和中断的IPython进程的输出。IPython包含了根Python安装(
C:\Python36\DLLs
)中的几个额外的.pyd文件。我知道我要加载的pyd是使用过的sqlite,这是加载的模块之一(大概是IPython将所有输入命令存储在sqlite数据库中,以便轻松访问历史记录)。临时删除\u sqlite3.pyd文件允许加载模块。你知道吗Python DLLs文件夹优先于路径上的文件夹,因此当前的修复方法是将Python dll文件夹中的sqlite3.dll替换为MapServer使用的文件夹,并且所有这些文件夹都正常工作。你知道吗
相关问题 更多 >
编程相关推荐