__init__.so(而不是__init__.py)掩盖了子包

时间:2011-11-08 18:57:30

标签: python module python-3.x package cython

我正在用cython编写一些代码,我有一些"Packages “within” modules"。 - 这实际上是我的问题的后续跟进,结构应该是相同的。问题是这是cython,所以我处理.so不是.py

__init__.so工作的程度,

import mystuff

会起作用,但它似乎掩盖了下面的所有子包。也就是说,

import mystuff.test.test1

不会。我收到ImportError: No module named ...错误。

我该如何解决这个问题?在将其编译为.pyx之前,是否需要添加到.c?或者也许我可以将__init__.so重命名为其他内容,并以某种方式将其添加到__init__.py(注意,__init__.py仍然需要与.so一起存在以显示它是一个包)?或者别的什么。


更新__path__属性未定义.so个包...

好吧,我有一个想法,也许我可以通过操纵包的__path__属性来解决这个问题。有趣的是,这是为.py包定义的,但导致.so的错误。这不是一个解决方案,但我想知道它是否是问题的根源。

2 个答案:

答案 0 :(得分:2)

让您的Cython代码与__init__.py不同,并将其导入普通的python __init__.py请参阅我之前问题的答案。

答案 1 :(得分:2)

对于给定问题,最简单的解决方案可能是将__init__.so模块重命名为_native.so。之后,您可以创建包含以下行的__init__.py

from _native import *

它应该像你描述的那样工作。