【发布时间】:2016-12-10 22:48:40
【问题描述】:
我想重构一个我在日常工作中经常使用的 python 库,将它作为开源发布在 github 上。 在这样做之前,我想遵守某种 Python 项目结构的最佳实践。 我将在下面描述我想做的事情,我会很感激你的建议。
这是我的库(mylib)结构:
mylib/
/examples/
simple_example.py
/mylib/
__init__.py
foo.py
bar.py
/tests/
test_foo.py
test_bar.py
这里是文件:
#foo.py
def Foo():
print("foo.Foo")
#bar.py
import foo
def Bar():
print("bar.Bar")
foo.Foo()
#test_bar.py
from ..mylib import bar #doesnt work!
class TestBar(unittest.TestCase):
def test_1(self):
bar.Bar()
self.assertEqual(True, True)
if __name__ == '__main__':
unittest.main()
#simple_example.py
from .. import foo #doesnt work!
from .. import bar #doesnt work!
if __name__ == '__main__':
foo.Foo()
bar.Bar()
我想做的是:
1- 理想情况下从 /mylib/examples/ 执行 simple_example.py:
$cd myapp
$cd examples
$python simple_example.py
Traceback (most recent call last):
File "simple_example.py", line 2, in <module>
from .. import foo
SystemError: Parent module '' not loaded, cannot perform relative import
2- 理想情况下从 /mylib/tests/ 执行单个测试文件:
$cd myapp
$cd tests
$python test_bar.py
Traceback (most recent call last):
File "test_bar.py", line 3, in <module>
from ..mylib import bar
SystemError: Parent module '' not loaded, cannot perform relative import
3- 从 mylib 根目录执行所有测试
$cd myapp
$python -m unittest discover tests #same problem as above!
所以,问题出在 simple_example.py 和 test_bar.py 中的 import 语句中。 修复这些导入的最佳方法是什么?
请注意,我想使用 python 标准库 unittest 进行单元测试。
谢谢
查理
【问题讨论】:
标签: python python-unittest project-structure