ImportError с модулями Python в Travis CI - PullRequest
0 голосов
/ 17 октября 2019

У меня есть набор сценариев в .travis.yml, который на данный момент отлично работает

...
install:
- scripts/travis/install_deps.sh
- virtualenv -p /opt/pyenv/versions/3.6/bin/python3.6 venv
- source venv/bin/activate
- pip install -r requirements.txt
before_script:
- scripts/test.sh
script:
- scripts/travis/build.sh
after_success:
- deactivate
- virtualenv -p /opt/pyenv/versions/2.7/bin/python2.7 venv
- source venv/bin/activate
- pip install -r requirements.txt
...

Однако я бы хотел немного его почистить, чтобы было меньше повторений, чтобы .travis.yml выгляделокак

...
install:
- scripts/travis/install_deps.sh
- export PYTHON_VERSION=3.6
- scripts/travis/install_python_deps.sh
before_script:
- scripts/test.sh
script:
- scripts/travis/build.sh
after_success:
- export PYTHON_VERSION=2.7
- scripts/travis/install_python_deps.sh
...

, где install_python_deps.sh выглядит как

#!/usr/bin/env bash
set -e

if [ ! -z "$VIRTUAL_ENV" ]; then deactivate; fi
virtualenv -p "/opt/pyenv/versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}" venv
source venv/bin/activate
pip install -r requirements.txt

Проблема возникает, когда это выполняется в travis. Сборка прерывается, когда не найден test.sh, который запускает скрипт на языке Python, использующий модуль, объявленный в requirements.txt. Будем весьма благодарны за любые указания относительно того, почему это происходит.

1 Ответ

0 голосов
/ 17 октября 2019

source venv/bin/activate внутри scripts/travis/install_python_deps.sh действует только до выхода из сценария install_python_deps.sh. Если вы хотите использовать установленные модули вне сценария install_python_deps.sh, вам необходимо запустить source venv/bin/activate (снова) вне сценария, например:

...
install:
- scripts/travis/install_deps.sh
- scripts/travis/install_python_deps.sh 3.6
- source venv/bin/activate
before_script:
- scripts/test.sh
script:
- scripts/travis/build.sh
after_success:
- scripts/travis/install_python_deps.sh 2.7
- source venv/bin/activate
...

Обратите внимание, что для его сокращения язаменил переменную окружения PYTHON_VERSION параметром командной строки. Вы можете настроить скрипт scripts/travis/install_python_deps.sh соответствующим образом:

#!/usr/bin/env bash

set -euo pipefail

PYTHON_VERSION=$1

if [ "$VIRTUAL_ENV" ]; then deactivate; fi

virtualenv -p "/opt/pyenv/versions/${PYTHON_VERSION}/bin/python${PYTHON_VERSION}" venv
source venv/bin/activate
pip install -r requirements.txt
...