【问题标题】:Can't load python extension module that exists无法加载存在的 python 扩展模块
【发布时间】:2012-06-29 06:49:35
【问题描述】:

我正在尝试使用 thanos,它会在运行时创建一个扩展模块。 Thanos 不断失败,因为它无法导入它在运行时创建的扩展。

我很困惑为什么会这样。

在运行时(编译后)“cutils_ext”目录包含cutils_ext.so

import cutils_ext 有效,但 import cutils_ext.cutils_ext 失败

ImportError: No module named cutils_ext

我已经直接用 imp 进行了测试。说 cutils 是导入的 cutils_ext 包。 当我这样做时:

imp.find_module('cutils_ext', cutils.__path__)

我又得到了:

ImportError: No module named cutils_ext

我完全感到困惑。有没有办法调试这个?由于无法启动 python 解释器(使用 picloud),我无法以详细模式运行 python,但如果我可以在运行时启用详细模式,那将有所帮助(还没有弄清楚如何做到这一点)。

【问题讨论】:

  • Thanos 链接其模块的 Python 版本是否与您使用的相同?例如,Python 2 和 Python 3 的入口点协议不同。
  • 是的,都是python2.7。我什至可以将扩展下载到我自己的计算机并直接加载。无论哪种方式,find_module 似乎都失败了,甚至在加载发生之前
  • 哇,我的错。看起来我在 sys,path 的其他地方有另一个 cutils_ext 并且 Theano 正在预加载它。在 Theano 上提交了一个错误 (github.com/Theano/Theano/issues/728)

标签: python python-import python-extensions


【解决方案1】:

你可以试试:

import cutils_ext
import cutils_ext.cutils_ext

我不知道为什么,但有时我还必须导入一个模块才能导入其中的子模块。

或者也许,只是也许,第二个 cutils_ext 根本不存在于第一个 cutils_ext 中?

编辑: 等一下.. 能否请您发布您的文件夹结构以及 PYTHONPATH 包含的内容?

我猜你有类似的东西:

upper_folder (a folder)
    cutils_ext (folder)
        __init__.py (file)
        cutils_ext.so (obviously file)

如果您的 PYTHONPATH 指向 upper_folder 那么您应该能够执行您发布的操作 请注意,如果您遇到这种情况,__ init __.py 必须在那里.

但是,如果您的 PYTHONPATH 直接指向 cutils_ext 文件夹,那么我认为您只能导入文件,因此 cutils_ext.cutils_ext 对解释器没有意义(除非您在 cutil_ext.so 中有一个名为 cutils_ext 的变量。 ..)

【讨论】:

  • "或者也许,只是也许,第二个 cutils_ext 根本不存在于第一个 cutils_ext 中?"好决定。这是非常微妙的,因为 theano 正在从另一个位置预加载我的 cutils_ext 包,然后修补 sys.path。因此,cutils_ext 引用了错误的包。呃..感谢您的帖子..帮助了很多!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-09
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多