当包含__init__.py时,Nosetests会给出ImportError(使用cython)

时间:2015-09-28 21:30:09

标签: python-3.x compiler-errors cython nose nosetests

我在使用python3的virtualenv中使用nose和cython时遇到了一个非常奇怪的错误。出于某种原因,即使python -m unittest basic_test.py正在运行,nosetests也开始给我一个ImportError。我创建了一个新目录来重现错误,以确保该目录中没有任何奇怪的内容。

以下是三个文件:fileA.pyx,setup.py和basic_test.py

file1.pyx
class FileA:
    def __init__(self):
        self.temp = {}

setup.py:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [
    Extension('fileA', ['fileA.pyx'],)
]
setup(
    name='test',
    ext_modules=ext_modules,
    cmdclass={'build_ext': build_ext},
)

basic_test.py:

def test():
        from fileA import FileA
        FileA()
        assert True

新目录。我跑python setup.py build_ext --inplace。它汇编。我运行nosetests单次测试通过。

然后我执行touch __init__.py,然后再次运行nosetests,但失败并出现此错误:

ImportError: No module named 'fileA'

这是一个错误还是我不明白 init 如何影响导入?

更新: 我找到了关于导入陷阱的post,并阅读了可能解释添加 init 如何打破它的内容。我仍然不知道它是如何适应的。

  

由于修复,这是Python 3.3中添加的全新陷阱   上一个陷阱:如果在sys.path上遇到一个子目录作为一部分   包导入包含 init .py文件,然后包含Python   解释器将创建一个仅包含的单个目录包   来自该目录的模块,而不是适当地找到所有模块   命名子目录,如上一节所述。

0 个答案:

没有答案