Using a pip requirements file in a conda yml file throws AttributeError: 'FileNotFoundError'
I have a requirements.txt
like
numpy
and an environment.yml
containing
# run via: conda env create --file environment.yml
---
name: test
dependencies:
- python>=3
- pip
- pip:
- -r file:requirements.txt
when I then run conda env create --file environment.yml
I get
Pip subprocess output:
Pip subprocess error: ERROR: Exception:
<... error traceback in pip >
AttributeError: 'FileNotFoundError' object has no attribute 'read'
failed
CondaEnvException: Pip failed
It is also strange how pip is called, as reported just before the error occurs:
['$HOME/.conda/envs/test/bin/python', '-m', 'pip', 'install', '-U', '-r', '$HOME/test/condaenv.8d3003nm.requirements.txt']
(I replace my home path with $HOME
)
Note the weird expansion of the requirements.txt
.
Any ideas?
Changes to Pip Behavior in 21.2.1
A recent change in the Pip code has changed its behavior to be more strict with respect to file:
URI syntax. As pointed out by a PyPA member and Pip developer, the syntax file:requirements.txt
is not a valid URI according to the RFC8089 specification.
Instead, one must either drop the file:
scheme altogether:
name: test
dependencies:
- python>=3
- pip
- pip:
- -r requirements.txt
or provide a valid URI, which means using an absolute path (or a local file server):
name: test
dependencies:
- python>=3
- pip
- pip:
- -r file:/full/path/to/requirements.txt
# - -r file:///full/path/to/requirements.txt # alternate syntax