У меня есть проект Python Celery следующей структуры:
├── celeryconfig.py
├── Dockerfile
│ └── _templates
├── framework
│ ├── celery
│ │ ├── celery.py
│ │ ├── __init__.py
│ │ └── __init__.cpython-36.pyc
│ ├── tasks
│ │ ├── tasks.py
│ │ ├── __init__.py
│ ├── utilities
│ │ ├── utilities.py
│ │ ├── __init__.py
│ ├── tests
│ │ ├── __init__.py
│ │ └── test_celery.py
, который я запускаю из каталога верхнего уровня с помощью команды celery framework.celery.celery worker
У меня есть tets в каталоге testsчто я бегу, используя нос2.Когда я запускаю его в каталоге, тесты проходят без проблем.Однако, когда тесты выполняются как часть процесса сборки докера, процесс nose2 завершается неудачно, потому что он не может понять смысл импорта, например
# test_celery.py
from framework.tasks.tasks import my_function
def test_my_function():
# Do some testing.
Импорт функции завершается успешно, но не выполняетсяимпорт импортированного файла, который выглядит следующим образом:
# tasks.py
from framework.utilities.utilities import some_other_function
Отчасти проблема, с которой я сталкиваюсь, заключается в том, что Celery определенно относится к тому, как он сам структурирован, поэтому попытки реструктурировать каталог только что привели ксельдерей не в состоянии начать.Я не совсем уверен, почему тесты терпят неудачу только в сборке докера, которая выглядит так:
FROM google/cloud-sdk:198.0.0-alpline
COPY . /project
WORKDIR /project
RUN apk add --no-cache python3 python3-dev && pip3 install -r requirements.txt
RUN nose2