导入Python类(__init__.py问题)

时间:2015-02-25 10:58:30

标签: python import module

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

文件夹结构如下:

/CorpusBuilder
    /corpusBuilder
        __init__.py
        corpus.py    # contains Corpus class
   /tests
       __init__.py
       test_corpus.py   # trying to import Corpus class — but fails

每个__init__.py文件的内容到底应该是什么? [顶级文件夹(CorpusBuilder)是否也需要__init__.py文件?] import中的test_corpus.py语句应该说什么?

很抱歉这么多问题:我想我只需要一个明确的例子。

2 个答案:

答案 0 :(得分:0)

没有必要在__init__.py个文件中添加任何内容。假设你从基地" CorpusBuilder"运行你的测试。目录,或以其他方式将该目录放到PYTHONPATH上,您的test_corpus文件可以简单地说from corpusBuilder.corpus import Corpus

答案 1 :(得分:0)

在我的方法中(根据http://www.scotttorborg.com/python-packaging/index.html),测试不在顶层。并且不需要那里的init文件。 (假设您的模块名称应为corpusBuilder)。你需要的是一个setup.py(再次:http://www.scotttorborg.com/python-packaging/minimal.htmlhttps://docs.python.org/2/distutils/setupscript.html),如果你想运行测试:

$ python setup.py test

所以你的结构应该是:

CorpusBuilder/
    corpusBuilder/
        corpus.py
        __init__.py
        tests/
           __init__.py
           test_corpus.py
    setup.py
    ...

在corpusBuilder的init中,您可以定义子模块的导入。这对于不污染您的命名空间很有用。例如:

from .submodule import foo

否则,这只是一个空白文件。

中的init文件
tests/

根本不需要任何东西,在test_corpus中你需要导入你的模块。例如:

from unittest import TestCase

import corpusBuilder

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

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