【发布时间】:2019-06-26 15:48:22
【问题描述】:
我有一个来自外部库的名为 tissue-classifier.cpython-37m-x86_64-linux-gnu.so 的 .so 文件,我想导入它,以便可以在我的本地类之一中扩展它。由于我正在扩展一个类,我需要使用cimport 将其作为扩展类型导入,我想知道这是否可能。如果我使用普通的 import 语句,那么我将得到一个 Python 编译版本,它不能用于扩展我当前文件中的 cdef 类。
当我尝试cimport tissue_classifier 文件时,它给了我一个错误,即找不到 tissue_classifier.pxd 文件,这是有道理的,因为它是 .so 格式。对不起,如果这是一个愚蠢的问题,我只是暂时无法弄清楚。
【问题讨论】:
-
您可以导入一个 .so 文件(如果它适合 Python)。但是 cimport 是不同的:它发生在模块由 Cython 编译时,而不是在运行并需要 .pxd 文件时发生。您已被告知(至少两次)问题很可能出在 Python 路径上。我建议您编辑此问题以显示相关文件的存储位置以及您对 setup.py 中的路径进行的尝试。 This bit of documentation 可能有用。
-
抱歉没有说明清楚。当我发现我要导入的包不是
.pxd格式,而是.so格式时,我已经解决了路径问题。我不再收到那个错误了。如果不直接从 Github 获取它,我无法导入.pxd文件,我不知道该怎么做。相反,我想知道是否可以从这个.so文件中导入扩展类型来扩展 cdef 类。 -
没有。如果没有 .pxd 文件,您将无法使用 cimport。您可以正常继承该类,但不能使用
cdef class。 In your earlier question 你说“dipy/tracking/local 包含两个组织分类器.pyx 和组织分类器.pxd” - 有什么变化? -
在指定目录的Github repository中,有
.pxd和.pyx文件。然而,当我决定检查我安装的实际目录时,它显示了this,其中的文件都是.so格式。有没有办法直接从 Github 导入它们? -
现在更有意义了!如果您只需要一个文件,最简单的方法可能就是从 github 复制它(使用“原始”按钮获取原始文件,然后使用 .so 文件保存到目录中);如果这不起作用,那么您可能需要尝试非 anaconda 的安装方式(pip 或源代码)
标签: python import compilation cython .so