virtualenv - 在 circleci 上创建 virtualenv 不能在作业/工作流的单独步骤中完成。为什么是这样?
问题描述
我正在尝试在构建步骤中安装要求并在 circleci 上运行测试。运行 pip install 时遇到权限被拒绝的问题,因为它尝试全局安装要求。我可以在用户级别安装要求,但使用 virtualenv 也可以:
version: 2
defaults: &defaults
docker:
- image: circleci/python:3.6
jobs:
build_dataloader:
<<: *defaults
working_directory: ~/app/dataloader
steps:
- checkout:
path: ~/app
- run:
name: Install requirements
command: |
virtualenv env
source env/bin/activate
pip install -r requirements.txt
dataloader_tests:
<<: *defaults
parallelism: 2
steps:
- checkout:
path: ~/app
- run:
name: Running dataloader tests
command: |
cd ~/app/dataloader
python3 -m unittest discover tests/unit/
- store_artifacts:
path: test-reports/
destination: app_tests
workflows:
version: 2
run_tests:
jobs:
- build_dataloader
- dataloader_tests:
requires:
- build_dataloader
有没有办法将 virtualenv 放在一个单独的步骤中?当我将 virtualenv 部分放在单独的步骤中时,这不起作用:
version: 2
defaults: &defaults
docker:
- image: circleci/python:3.6
jobs:
build_dataloader:
<<: *defaults
working_directory: ~/app/dataloader
steps:
- checkout:
path: ~/app
- run:
name: Setup virtualenv
command: |
virtualenv env
source env/bin/activate
- run:
name: Install requirements
command: |
pip install -r requirements.txt
dataloader_tests:
<<: *defaults
parallelism: 2
steps:
- checkout:
path: ~/app
- run:
name: Running dataloader tests
command: |
cd ~/app/dataloader
python3 -m unittest discover tests/unit/
- store_artifacts:
path: test-reports/
destination: app_tests
workflows:
version: 2
run_tests:
jobs:
- build_dataloader
- dataloader_tests:
requires:
- build_dataloader
为什么会失败?如果我把它放在一个单独的步骤中,它不应该创建虚拟环境吗?
解决方案
我认为这种方法的问题在于每个步骤都使用自己的 shell 运行,因此source env/bin/activate
当步骤完成时结果会丢失;pip install
在未激活 virtualenv 的不同 shell 中运行。试试这个:
- run:
name: Setup virtualenv
command: |
virtualenv env
- run:
name: Install requirements
command: |
source env/bin/activate
pip install -r requirements.txt
或者干脆env/bin/pip install -r requirements.txt
没有任何激活。
推荐阅读
- javascript - 在网站上计数器而不重置值
- jestjs - expect(...).toHaveStyleRule 不是函数
- powershell - Get list of users who have logged into Octopus in the last 6 months
- sql - 多个参数的 CASE 表达式
- java - 使用 JSch 时重命名命令不起作用
- angular - “ Uncaught TypeError: Cannot read property 'initialize' of undefined” 运行 ng test 命令并在 parse.initialize 处显示错误
- angular - Angular 指令单元测试
- ios - 如何在 BlueSocket 中使用 UnSafeRawPointer 读取/写入数据?
- django - 如何选择与 Django 模型不同的选项
- r - 将 `zoo:rollapply` 的 `width` 参数作为参数传递给被调用函数