【问题标题】:Travis fails to import my test module in Python 3 variantsTravis 无法在 Python 3 变体中导入我的测试模块
【发布时间】:2016-03-02 19:26:56
【问题描述】:

我正在尝试在 Travis CI 上针对 Python 的多个变体测试我的应用程序。在 Python 2.7 中,测试按预期通过。但是,在 Python 3.4 中,我得到了这个回溯

ERROR: tests.test_mymodule (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/opt/python/3.4.2/lib/python3.4/unittest/case.py", line 58, in testPartExecutor
    yield
  File "/opt/python/3.4.2/lib/python3.4/unittest/case.py", line 577, in run
    testMethod()
  File "/opt/python/3.4.2/lib/python3.4/unittest/loader.py", line 32, in testFailure
    raise exception
ImportError: Failed to import test module: tests.test_mymodule
Traceback (most recent call last):
  File "/opt/python/3.4.2/lib/python3.4/unittest/loader.py", line 312, in _find_tests
    module = self._get_module_from_name(name)
  File "/opt/python/3.4.2/lib/python3.4/unittest/loader.py", line 290, in _get_module_from_name
    __import__(name)
  File "/home/travis/build/MyGitHubName/mymodule/tests/test_mymodule.py", line 8, in <module>
    from mymodule import mymodule
  File "/home/travis/build/MyGitHubName/mymodule/mymodule/__init__.py", line 1, in <module>
    from mymodule import MyModule
ImportError: cannot import name 'MyModule'

在 Python 3.5 中我得到了这个(类似,但与 3.4 不完全相同)

ERROR: mymodule (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: mymodule
Traceback (most recent call last):
  File "/opt/python/3.5.0/lib/python3.5/unittest/loader.py", line 462, in _find_test_path
    package = self._get_module_from_name(name)
  File "/opt/python/3.5.0/lib/python3.5/unittest/loader.py", line 369, in _get_module_from_name
    __import__(name)
  File "/home/travis/build/MyGitHubName/mymodule/mymodule/__init__.py", line 1, in <module>
    from mymodule import MyModule
ImportError: cannot import name 'MyModule'

我的测试脚本有以下导入:

import unittest
from mock import patch
from mymodule import MyModule

在 Travis 上,我尝试通过两者来运行测试

python setup.py test

python -m unittest discover

我的__init__.py mymodule 看起来像这样:

from mymodule import MyModule

mymodule.py 包含 MyModule 类。

同样,由于导入错误,这些适用于 Python 2.7,但不适用于 3.4 或 3.5。我需要对导入进行哪些调整以允许我的测试在 Python 2.7 和 Python 3.4/3.5 中运行?

【问题讨论】:

    标签: python python-2.7 unit-testing python-3.x travis-ci


    【解决方案1】:

    假设你有这样的项目结构:

    您确实会收到该错误,因为您应该更明确地了解您在 python3 中的导入: Changes in import statement python3

    因此,只需将 mymodule/__init__.py 中的导入语句编辑为明确:

    from .mymodule import MyModule

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2019-01-28
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多