项目目录结构,以便我可以为单元测试导入包

Project directory structure so I can import package for unittest

我对如何构建包含包和单元测试的项目感到困惑。

我有这个目录结构:

TestProject/
├── package
│   ├── constants.py
│   ├── __init__.py
│   ├── package.py
│   └── tests
│       └── test_package.py
└── usage.py

constants.py

A = 1

__init__.py

from .package import give_A

package.py

from .constants import *

def give_A():
    return A

usage.py

from package import give_A

print(give_A())

test_package.py

import unittest
from package import give_A

class Test_package(unittest.TestCase):
    def test_simple(self):
        self.assertEqual(give_A(), 1)

if __name__ == '__main__':
    unittest.main()

一切正常,直到我尝试 运行 test_package.py 模块,这可以理解地无法导入包:

~/Python/TestProject/package/tests $ python3 test_package.py 
Traceback (most recent call last):
  File "test_package.py", line 3, in <module>
    from package import give_A
ImportError: No module named 'package'

但是,这似乎是包/测试的首选结构。我怎样才能让它发挥作用?或者我应该完全不同地做(结构、目录、导入、测试执行...)?

或者:

  1. 设置您的 PYTHONPATH,使 TestProject 在其中。

  2. 运行 像这样使用 unittest 进行测试:

    ~/Python/TestProject $ python3 -m package.tests.test_package

  3. 使用unittest命令行接口:

    ~/Python/TestProject $ python3 -m unittest package/tests/test_package.py

有关详细信息,请参阅:https://docs.python.org/3/library/unittest.html#command-line-interface