我想重构一个我在日常工作中经常使用的 Python 库,以开源的方式发布到 Github 上。
在这样做之前,我希望符合一些 Python 项目结构的最佳实践。
我将在下面描述我想要做的事情,并欢迎您提出建议。
以下是我的库(mylib)的结构:
这里是文件:
我想要做的是:
1. 最好从/mylib/examples/中执行simple_example.py。
3- 从mylib根目录执行所有测试
所以,simple_example.py和test_bar.py中的问题在于导入语句。 最好的修复方法是什么?
请注意,我想使用Python标准库unittest进行单元测试。
谢谢,
Charlie
以下是我的库(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中的问题在于导入语句。 最好的修复方法是什么?
请注意,我想使用Python标准库unittest进行单元测试。
谢谢,
Charlie
python setup.py develop
命令。我会更新我的答案以反映这一点。 - rdeggesfrom . import foo
。需要注意的是,我正在使用Python 3.5版本。您可以在David Beazley在PyCon2015的演讲中的17分40秒处找到更多细节,请参考该链接:https://www.youtube.com/watch?v=0oTh1CXRaQ0 - Charlie