Не удается импортировать субмодуль из модуля в Pytest - модуль не имеет атрибута - PullRequest
0 голосов
/ 22 января 2019

Я получаю следующую ошибку при попытке запустить PYTHONPATH=${DIR}/src:${DIR}/test pytest -vvv test/unittests в контейнере Docker (работает, когда я пытаюсь запустить его на моем компьютере):

ImportError while loading conftest '/.../test/conftest.py'.
test/conftest.py:3: in <module>
    from flask_app import create_api
src/flask_app/__init__.py:4: in <module>
    api = create_api(app)
src/flask_app/app.py:22: in create_api
    from . data.views import master_data
src/flask_app/data/views.py:3: in <module>
    from common.my_module import my_func
src/common/my_module/__init__.py:1: in <module>
    from common.my_module.bar_module import my_func  # NOQA
src/common/my_module/bar_module.py:5: in <module>
    import common.my_module.errors as err
E   AttributeError: module 'common' has no attribute 'my_module'

Моя структура репо

src/
        common/
                   my_module/
                                 __init__.py
                                 errors.py                                     
                                 bar_module.py
                   foo_module.py
test/
        unittests/
                   __init__.py 
                   test_bar_module.py
        conftest.py
        pytest.ini

help(common):

>>> import common
>>> help(common)
Help on package common:

NAME
    common

PACKAGE CONTENTS
    my_module (package)
    foo_module

FILE
    /.../src/common/__init__.py

sys.path:

>>> import sys
>>> sys.path
['', '/.../src', '/.../test', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']

И я могу импортировать foo_module.py из общего числа без ошибок.Таким образом, он может использовать foo_module.py, но не может использовать my_module/bar_module.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...