如何通过Cython使我的Python模块可见?

时间:2014-05-19 19:07:01

标签: python cython

我有典型的Cython代码(.pyx),除了需要从Python模块访问变量之外:

helloworld.pyx:

from hellotest import label

def say_hello():
    print('Hello world!' + label)

和hellotest.py

from helloworld import say_hello

label = 'some label'
say_hello()

当我尝试使用通常的python setup.py build_ext --inplace编译它时,我收到一个错误: Traceback(最近一次调用最后一次):   文件" hellotest.py",第1行,in     来自helloworld import say_hello   文件" helloworld.pyx",第2行,在init helloworld中(helloworld.c:967)     来自hellotest进口标签   文件" /home/dusan/projects/temp/hellotest.py" ;,第1行,在     来自helloworld import say_hello ImportError:无法导入名称say_hello

但是,当我只删除标签依赖项(helloworld.pyx中的第一行和print statemet中的标签)时,代码编译并运行正常。

有人可以告诉我,如何从pyx代码中访问其他模块? 谢谢!

1 个答案:

答案 0 :(得分:2)

问题在于您尝试将import hellotest导入helloworld并将helloworld导入hellotest。这称为circular import,这意味着dependency-graph,其中nodesimport的文件,verticesimport语句,因此,此graph有一个圆圈,因此它永远不会是forest。这意味着您需要阅读hellotest才能阅读helloworld,但您需要阅读helloworld才能阅读hellotest。如果您想象一些试图分析依赖关系的东西,那么您将很快意识到圆圈会创建一个无限循环。尝试不再使用您的import语句形成圈子,您将可以安全地抵御此类问题。