Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Virtualenv python with AWS codebuild: why the deactivate command is not found?

I use AWS Codebuild to upload python code into AWS Lambda from a GitHub repository. So I set up virtual python environments with virtualenv.

Here is my buildspec.yml:

version: 0.2
phases:
 install:
   commands:
     - echo "install step"
     - apt-get update
     - apt-get install zip -y
     - apt-get install python3-pip -y
     - pip install --upgrade pip
     - pip install --upgrade awscli
     # Define directories
     - export HOME_DIR=`pwd`
     - cd $HOME_DIR
     - export PREPROCESSING_DIR=$HOME_DIR/preprocessing
     - export COMPARE_DIR=$HOME_DIR/compareHilightGood
     - export NLTK_DATA=$HOME_DIR/nltk_data
 pre_build:
   commands:
     - echo "pre_build step"
     # Configure preprocessing virtual environement
     - cd $PREPROCESSING_DIR
     - virtualenv venv_preprocessing
     - . venv_preprocessing/bin/activate
     #  Install modules
     - pip install -U requests
     - pip install -U nltk
     #  NLTK download
     - python -m nltk.downloader -d $NLTK_DATA wordnet stopwords punkt
     - pip freeze > requirements.txt
     #  zip everything
     - mv $VIRTUAL_ENV/lib/python3.6/site-packages/* .
     - sudo zip -r9 preprocessing.zip .
     - source deactivate
     # Configure compare virtual environement
     - cd $COMPARE_DIR
     - virtualenv venv_compare
     - . venv_compare/bin/activate
     # install modules
     - pip install -U gensim
     - pip install -U pandas
     - pip freeze > requirements.txt
     # zip everything
     - mv $VIRTUAL_ENV/lib/python3.6/site-packages/* .
     - sudo zip -r9 compare.zip .
     - source deactivate
 build:
   commands:
     - echo 'build step'
     # preprocessing
     - cd $PREPROCESSING_DIR
     - aws s3 cp --recursive --acl public-read ./preprocessing.zip s3://lambda-preprocessing/
     - aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:preprocessing --s3-bucket lambda-preprocessing --s3-key preprocessing.zip
     - aws lambda update-function-configuration --function-name arn:aws:lambda:eu-west-3:671560023774:function:preprocessing --environment 'Variables={NLTK_DATA=/var/task/nltk_data}'
     # compare
     - cd $COMPARE_DIR
     - aws s3 cp --recursive --acl public-read ./compare.zip s3://lambda-comparehilightgood/
     - aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:preprocessing --s3-bucket lambda-comparehilightgood --s3-key compare.zip
 post_build:
   commands:
     - echo "post_build step"

In the pre_build step, I'm switching between two virtualenv. So, I use deactivate (or source deactivate). But In both cases I get this error:

[Container] 2019/03/17 09:07:54 Running command source deactivate
/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: source: not found
 [Container] 2019/03/17 09:07:54 Command did not exit successfully source deactivate exit status 127
[Container] 2019/03/17 09:07:54 Phase complete: PRE_BUILD Success: false
[Container] 2019/03/17 09:07:54 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: source deactivate. Reason: exit status 127

Anyway, it seems the commands source and deactivate are not found. Do you know why ?

like image 263
Louis Singer Avatar asked Mar 17 '19 10:03

Louis Singer


People also ask

How do I deactivate virtualenv?

You can deactivate a virtual environment by typing deactivate in your shell. The exact mechanism is platform-specific and is an internal implementation detail (typically, a script or shell function will be used).

How do I disable virtualenv in flask?

You may notice that the shell prompt has been changed too. virtualenv prepends the name of the currently activated virtual environment, so you know that you're not working on the global system. You can deactivate your virtual environment by running the deactivate command.

How do I know if virtual environment is installed?

Verify if Virtualenv is installed There is a chance that virtualenv is already installed on your system. If you see a version number (in my case 1.6. 1), it's already installed.


1 Answers

deactivate is not a script that can be sourced, it's a shell function created in the current shell environment by . venv/bin/activate. So try just deactivate without source.

As for the error about source itself please note that the command . venv/bin/activate works hence the shell understands command . but not source.

like image 118
phd Avatar answered Oct 31 '22 18:10

phd