当我尝试在Docker容器中运行PYTHONPATH=${DIR}/src:${DIR}/test pytest -vvv test/unittests
时出现以下错误(当我尝试在自己的计算机上运行它时,它会起作用):
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