Python package structure, setup.py for running unit tests
我不确定我是否正确地组织了包结构,或者在setup.py中使用了正确的选项,因为我在尝试运行单元测试时会出错。
我有这样的结构:
1 2 3 4 5 6 7 8 9 10 11 | /project /bin /src /pkgname __init__.py module1.py module2.py /tests __init__.py test1.py test2.py |
my setup.py如下所示:
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env python from setuptools import setup, find_packages setup(version='0.1', description='Trend following library', author='Nate Reed', author_email='[email protected]', packages=find_packages(), install_requires=['numpy'], test_suite="tests", ) |
当我运行"python setup.py test"时,我得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | nate@nate-desktop:~/PycharmProjects/trendfollowing$ sudo python setup.py test running test running egg_info writing requirements to UNKNOWN.egg-info/requires.txt writing UNKNOWN.egg-info/PKG-INFO writing top-level names to UNKNOWN.egg-info/top_level.txt writing dependency_links to UNKNOWN.egg-info/dependency_links.txt reading manifest file 'UNKNOWN.egg-info/SOURCES.txt' writing manifest file 'UNKNOWN.egg-info/SOURCES.txt' running build_ext Traceback (most recent call last): File"setup.py", line 11, in <module> test_suite="tests", File"/usr/lib/python2.6/distutils/core.py", line 152, in setup dist.run_commands() File"/usr/lib/python2.6/distutils/dist.py", line 975, in run_commands self.run_command(cmd) File"/usr/lib/python2.6/distutils/dist.py", line 995, in run_command cmd_obj.run() File"/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 137, in run self.with_project_on_sys_path(self.run_tests) File"/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 117, in with_project_on_sys_path func() File"/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 146, in run_tests testLoader = loader_class() File"/usr/lib/python2.6/unittest.py", line 816, in __init__ self.parseArgs(argv) File"/usr/lib/python2.6/unittest.py", line 843, in parseArgs self.createTests() File"/usr/lib/python2.6/unittest.py", line 849, in createTests self.module) File"/usr/lib/python2.6/unittest.py", line 613, in loadTestsFromNames suites = [self.loadTestsFromName(name, module) for name in names] File"/usr/lib/python2.6/unittest.py", line 587, in loadTestsFromName return self.loadTestsFromModule(obj) File"/usr/lib/python2.6/dist-packages/setuptools/command/test.py", line 34, in loadTestsFromModule tests.append(self.loadTestsFromName(submodule)) File"/usr/lib/python2.6/unittest.py", line 584, in loadTestsFromName parent, obj = obj, getattr(obj, part) AttributeError: 'module' object has no attribute 'test1' |
测试名称是否需要与模块名称匹配?在我的包结构中是否需要遵循其他约定?
经过反复试验,我找到了这个问题的原因。测试名称应与模块名称匹配。如果有"foo-test.py"测试,则需要有相应的模块foo.py。
我找到了一些关于组织包结构的指导原则,这帮助我将包重新组织成一个我自信的结构。