导入Python类(初始化问题)

导入Python类(初始化问题),python,import,module,Python,Import,Module,将Python模块从项目文件夹导入测试文件夹时遇到问题。当然,我遗漏了一些东西,但在阅读了很多其他答案后,我仍然无法让它发挥作用 文件夹结构如下: /CorpusBuilder /corpusBuilder __init__.py corpus.py # contains Corpus class /tests __init__.py test_corpus.py # trying to import Corpu

将Python模块从项目文件夹导入测试文件夹时遇到问题。当然,我遗漏了一些东西,但在阅读了很多其他答案后,我仍然无法让它发挥作用

文件夹结构如下:

/CorpusBuilder
    /corpusBuilder
        __init__.py
        corpus.py    # contains Corpus class
   /tests
       __init__.py
       test_corpus.py   # trying to import Corpus class — but fails
每个
\uuuu init\uuuu.py
文件的具体内容是什么?[顶级文件夹(
CorpusBuilder
)是否也需要
\uuuu init\uuuuuuuuuuuupy
文件?]
test\u corpus.py
中的
导入
语句应该说什么


抱歉问了这么多问题:我想我只需要一个清晰的例子就可以了。

根本不需要在
\uuuu init\uuuuuuuuy.py
文件中添加任何内容。假设您正在从基本的“CorpusBuilder”目录运行测试,或者以其他方式将该目录放在PYTHONPATH上,那么您的测试语料库文件可以简单地说是来自CorpusBuilder的
。在我的方法(根据)中,语料库导入语料库不是顶级测试。而且那里不需要初始化文件。(假设您的模块名称应为corpusBuilder)。如果要使用以下工具运行测试,则需要setup.py(再次:和):

$ python setup.py test
因此,您的结构应该是:

CorpusBuilder/
    corpusBuilder/
        corpus.py
        __init__.py
        tests/
           __init__.py
           test_corpus.py
    setup.py
    ...
在corpusBuilder的init中,您可以定义子模块的导入。这对于不污染名称空间很有用。例如:

from .submodule import foo
from unittest import TestCase

import corpusBuilder

class TestOne(TestCase):
    def test_ist_string(self):
        s = minimal.test()
        self.assertTrue(isinstance(s, basestring))
否则,这只是一个空白文件

中的初始化文件

tests/
根本不需要任何东西,在您的测试语料库中,您需要导入您的模块。例如:

from .submodule import foo
from unittest import TestCase

import corpusBuilder

class TestOne(TestCase):
    def test_ist_string(self):
        s = minimal.test()
        self.assertTrue(isinstance(s, basestring))

您现在应该可以运行测试了。

关于如何设置项目,请参见,例如,从基本的'CorpusBuilder'目录,我正在运行
$python test/test\u corpus.py
(其中包含来自CorpusBuilder.corpus import corpus的
)但仍然会遇到相同的错误。我还必须将目录添加到PYTHONPATH吗?我还尝试将
\uuuu init\uuuuu.py
文件添加到基本的“CorpusBuilder”目录。我刚刚收到一个错误,说
ImportError:没有名为corpusBuilder.corpus的模块