Intro
My pipeline job has been running without issue for the last year+. All of a sudden I started to receive this error right after my pip3 install -r requirements.txt:
× This environment is externally managed
Well I never had that problem before. I assumed that ADO sprinkles some magic dust onto the agents in the pool and creates an already virtual environment so why bother requiring further vitrualization?? I don’t know. And that’s how I rationalized how it might have ever worked in the first place if I ever bothered to think about it at all.
But I guess I was living on borrowed time and that house of cards came down hard, probably after the agents were upgraded.
The details
With some small effort I have managed to have the pipeline build up a virtual python environment and install my needed packages into it. Here is the relevant code section in the yaml file.
This by the way is my job to check that all pipelines have run correctly in the last hour:
# As of 2/2024 we need to run pytho in a virtual environment - script: | python3 -m venv venv source ./venv/bin/activate pip3 install -vvv --timeout 60 -r requirements.txt python3 check_all_pipelines.py conf_check_all.ini displayName: 'Run script' workingDirectory: $(System.DefaultWorkingDirectory)/Pipeline_check env: ADO_AUTH: $(ado_auth) PYTHONPATH: $(System.DefaultWorkingDirectory)/Pipeline_check:$(System.DefaultWorkingDirectory)
The requirements.txt simply contains the line
pymsteams==0.2.2
Conclusion
We have shown how to set up a python virtual environment within your yaml file for an Azure DevOps pipeline. You might need this if you rely on any external packages which are not present in the OS version of python on the agents.
References and related
Wrtie-up of my ADO pipeline checker pipeline