我有典型的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代码中访问其他模块? 谢谢!
答案 0 :(得分:2)
问题在于您尝试将import
hellotest
导入helloworld
并将helloworld
导入hellotest
。这称为circular import
,这意味着dependency-graph
,其中nodes
是import
的文件,vertices
是import
语句,因此,此graph
有一个圆圈,因此它永远不会是forest
。这意味着您需要阅读hellotest
才能阅读helloworld
,但您需要阅读helloworld
才能阅读hellotest
。如果您想象一些试图分析依赖关系的东西,那么您将很快意识到圆圈会创建一个无限循环。尝试不再使用您的import语句形成圈子,您将可以安全地抵御此类问题。