首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cython:从.pyx文件导入定义

Cython:从.pyx文件导入定义
EN

Stack Overflow用户
提问于 2021-10-29 09:22:08
回答 1查看 320关注 0票数 1

我有一个Cython .pxd文件和一个Cython .pyx文件,pyx文件包含一个cdef类:

代码语言:javascript
复制
# myclass.pyx (compiled to myclass.so)
cdef class myclass:
   pass

现在是另一个特性的.pxd文件

代码语言:javascript
复制
# another.pxd (with another.pyx along)
from libcpp.vector cimport vector
import myclass # This line is funny, change 'myclass' to whatever and no syntax error

cdef vector[myclass] myvar # COMPILE TIME ERROR
cdef myclass myvar2        # SIMPLER, STILL COMPILE TIME ERROR

在编译another.pyx时,Cython显示关于vector[myclass]的错误,它说'myclass‘是未知的。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-07 06:06:10

应该以这样的方式清楚地描述:

'import'

  • Cython

  • myclass.pyx被编译成.so文件

  • ,但是.so文件中有2种
  • Python定义:只能用定义导入:只能用'cimport'

导入

问题是import myclass in another.pxd不会导入myclass,因为它是cdef (Cython )。

在another.pxd文件中,要导入“myclass”,它必须是:

  • from myclass cimport myclass
    • myvar2将是:cdef myclass myvar2

  • cimport myclass
    • myvar2将是:cdef myclass.myclass myvar2

  • cimport some.path.to.myclass as myclass
    • myvar2将是:cdef myclass myvar2

导出可能也有问题,特别是使用Python工具而不是直接使用cython3gcc

  • __pyx_capi__在.so中不可用,file
  • myclass不是公共的,导入

后看不到

因此,最好将myclass置于myclass.pyx中的公共范围内:

代码语言:javascript
复制
cdef public:
    class myclass:
        pass
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69766466

复制
相关文章

相似问题

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