我想知道如果可能的话,如果没有在头文件中声明变量,如何将一个变量从一个cython模块导入另一个cython模块。
假设我有一个(预编译且不可更改的)库及其cython头文件pxd。
lib.pyx
cdef double VAR1 = 1.0
cdef double VAR2 = 2.0
lib.pxd
cdef double VAR1
现在我想从另一个cython文件访问VAR2。这可能吗?访问VAR1工作正常:
app.pyx(1)
from lib cimport VAR1
print VAR1
结果
1.0
但尝试以同样方式导入VAR2失败:
app.pyx(2)
from lib cimport VAR1, VAR2
print VAR1, VAR2
结果
CYTHON: app.pyx:1:0: 'VAR2.pxd' not found
CYTHON: app.pyx:1:23: Name 'VAR2' not declared in module 'lib'
我认为将VAR2声明为外部可能有效,但似乎并非如此:
app.pyx(3)
from lib cimport VAR1
cdef extern double VAR2
print VAR1, VAR2
结果
PYTHON: ImportError: ./app.so: undefined symbol: VAR2
它似乎接受了定义,但没有看到符号。如果这样的导入是完全可能的,任何想法,如果是的话,如何实现它?我已经尝试了
的所有组合import lib
cimport lib
from lib import *
from lib cimport *