仅使用 IPython 时出现导入错误

地理学

我有一个已编译的 .pyd 模块,它依赖于其他几个 DLL(Python mapscript 和 MapServer),我正在尝试在 Windows 10 上的 IPython 中使用它。设置步骤如下:

  • 创建了一个新的虚拟环境
  • 将 mapscript 安装到环境中
  • 设置 PATH 以包含包含 MapServer DLL 的文件夹
  • 使用标准 venv Python 运行时,“import mapscript”工作正常
  • 启动 ipython 并运行“import mapscript”时,出现以下错误: ImportError: DLL load failed: The specified procedure could not be found.

到目前为止的调试步骤:

  • sys.executable 在两种情况下是相同的(venv Python 和 venv IPython)
  • os.environ["PATH"] 是相同的
  • ipython 中的 sys.path 最后在 IPython 中有几个额外的路径 -C:\Users\user\.ipython和 'c:\virtualenvs\mapscript-jupyter3\lib\site-packages\IPython\extensions' 但在其他方面是相同的。删除这些路径不会改变错误。
  • 我尝试使用 Process Monitor 查找丢失的 DLL,但似乎都找到了。

在使用新创建的 venv 的 Python 2.7 和 Python 3.6 中都会出现相同的问题。问题似乎与ipython notebook 可以导入 pyd 模块相反,但 python 解释器不能

所以我的问题是 IPython 对 Python 环境做了什么会导致与标准 Python 的差异并导致 ImportError?

地理学

这花了相当长的时间才发现问题。使用Process Monitor可以很容易地发现任何丢失的 DLL 然而,在这种情况下,找到了所有依赖的 DLL,但其中一个没有我试图导入的 .pyd 文件(或关联的 DLL)使用的函数。

我设法将测试范围缩小到 2 个导致错误的命令 - 直接加载 PYD。

python -c "import _mapscript"
ipython -c "import _mapscript"

我尝试删除/修改 PATH,进出虚拟环境,以及 py2 和 py3,都产生了相同的错误。

然后我尝试运行 Process Monitor 并比较结果 - 除了 ipython 为交互式 shell 加载大量额外的 Python 库之外,没有什么特别突出的。

Process Monitor 为每个事件包含一个方便的 Properties 选项,它还显示为 Process 加载了哪些模块。这些可以排序,然后复制到剪贴板。

加载模块

我能够比较工作 Python 和损坏的 IPython 进程的输出。IPython 从根 Python 安装 ( C:\Python36\DLLs) 中包含了几个额外的 .pyd 文件我知道我试图加载使用过的 sqlite 的 pyd,这是加载的模块之一(大概是因为 IPython 将所有输入命令存储在 sqlite 数据库中以轻松访问历史记录)。临时删除 _sqlite3.pyd 文件允许加载模块。

Python DLLs 文件夹优先于 PATH 上的文件夹,因此当前的修复是将 Python DLL 文件夹中的 sqlite3.dll 替换为 MapServer 使用的那个,并且一切正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅使用coopr.pyomo在IPython Notebook中导入错误

使用Anaconda安装Python,启动ipython时出现内核错误

使用导入/导出时出现 webpack 错误

尝试使用GPU导入Tensorflow时出现导入错误

在conda解释器中使用VSCode时出现导入错误,但在Conda中导入时不出现导入错误

使用 Python 模块运行 Ansible Playbook 时出现导入错误

尝试使用Loop从网站导入数据时出现错误

Python:使用导入函数时出现类型错误

IPython-IPyparallel导入错误

使用PyCharm导入模块时出现错误,而使用Jupyter Notebook时不会发生错误

使用ipython进行调试时记住断点

如何在Windows上使用iPython Notebook解决熊猫的导入错误?

使用qsub运行shellscript时出现“意外的文件结尾”和“错误导入函数定义”错误

尝试导入使用 swig 的 python 库时出现“错误的 ELF 类”错误

AngularJS - 仅使用 HTTP GET 时出现 CORS 错误

使用仅主机网络启动vm时出现游荡错误

在Windows上使用PyCharm / iPython控制台时出现“ tput:未知终端'emacs'”消息

TensorFlow:IPython的GNU屏幕导致导入错误

iPython bokeh导入错误Row和SizingMode

IPython Notebook:导入脚本功能的名称错误

使IPython导入我的意思

使用VBA从受保护的网站导入Excel中的数据时出现运行时错误438

使用 ES6 语法导入 jQuery 时出现类型错误

无法导入模块“index”:使用 claudia.js 时出现 aws 云监视日志错误

使用插件导入DAG时出现气流错误-只能在操作员之间设置关系

使用rest-api导入pbix文件时出现MultiPartMimeStreamFormatException错误

使用Ob和Reflex导入CSS文件时出现staticfile错误

使用pyinstaller转换python脚本时出现问题。导入错误:库不兼容

在Chrome中使用ES-6导入语法时出现未捕获的语法错误