Не удается найти установленный модуль в моем конвейере Azure DevOps

#python #azure #azure-pipelines

Вопрос:

Я пытаюсь написать первый конвейер Azure DevOps, и у меня возникли проблемы с запуском моих тестов. Вот мой трубопровод

 - stage: Build
  displayName: Build stage
  jobs:
  - job: 'Build'
    pool:
      vmImage: '$(vmImageName)'
    steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '$(pythonVersion)'
      displayName: 'Use Python $(pythonVersion)'
    - script: |
          python3 -m venv venv
          source venv/bin/activate
          python3 -m pip install --upgrade pip
          pip3 install setup
          pip3 install -r requirements.txt
      workingDirectory: $(projectRoot)
      displayName: 'Install requirements'

    - script: |
        python3 PoC1/tests.py
      displayName: 'Run unittests'
 

Проблема в том, что он останавливается на unittest, расположенном в каталоге PoC1 с:

File "PoC1/tests.py", line 2, in <module> import requests ModuleNotFoundError: No module named 'requests'

После установки всех требований у меня есть вывод:

 Successfully installed azure-core-1.18.0 azure-functions-1.7.2 azure-storage-blob-12.8.1 certifi-2021.5.30 cffi-1.14.6 charset-normalizer-2.0.4 cryptography-3.4.8 idna-3.2 isodate-0.6.0 msrest-0.6.21 oauthlib-3.1.1 pycparser-2.20 requests-2.26.0 requests-oauthlib-1.3.0 six-1.16.0 unittest-xml-reporting-3.0.4 urllib3-1.26.6
 

Таким образом, кажется, что все установлено правильно, но не может найти модуль запросов во время выполнения моих тестов. У вас есть какие-либо идеи, в чем может быть проблема?

Комментарии:

1. Я думаю, что лучше всего задать этот вопрос в сообществе «DevOps».

Ответ №1:

Вы устанавливаете все необходимые зависимости внутри venv и выполняете сценарий вне его, поэтому при попытке запустить файл у вас нет видимости этих пакетов. Вы можете установить пакеты за пределами venv или использовать venv/bin/python3 для запуска файла вместо этого.

Комментарии:

1. Это не похоже на то, что после использования «source venv/bin/activate» я могу запустить любой скрипт, используя этот venv и установленные в нем пакеты?

2. Я считаю, что происходит то, что ваш script раздел является изолированным процессом, и он не выполняет предыдущие задачи в терминале venv. Он создает venv, но на самом деле не использует его. При использовании venv/bin/python3 будут использоваться пакеты, которые вы в нем установили.

3. Похоже, что вы правы. Большое спасибо за вашу помощь 🙂

4. @Serfer Не волнуйся! Рад, что смог помочь 🙂