Is there a way to specify conditional installs in a pip requirements.txt file that are based on the value of an environment variable?
I've been able to control most of what I need with environment markers, but all the markers I know of work only with specific values that are essentially pre-defined by python.
For example, I want to be able to control package installation for RHEL 5.3 vs. RHEL 6.3 vs. RHEL 6.6, etc. Also based on other criteria.
It would be perfect if I could specify in the results.txt file an environment variable that would be checked against a value I set before running pip. This seems like it would be desirable and straight forward functionality. I haven't had much luck so far finding comprehensive discussions of environment markers, so I'm hoping I've just missed some key bit of information :-)
Thanks much.
There's not really a way to do it with environment variables. Pip requirements files are basically just a list of pip install
arguments listed in a file. So if your requirements file looks like this:
Foo==1.1.0
Bar==0.1.0
Baz==2.0.1
Logically, pip is doing this:
pip install Foo==1.1.0
pip install Bar==0.1.0
pip install Baz==2.0.1
Unfortunately, in that context there's no way to apply environment variables.
There are a couple solutions to this problem.
One, you could have a base requirements file, say requirements.txt
, that lists common dependencies for all platforms. Then, you could have individual requirements files that are named, say, requirements.rhel53.txt
, requirements.rhel63.txt
, etc. The top of each of these files could have this as the first line:
-r requirements.txt
And then additional special dependencies listing. Then, in each environment, you could set an env var, let's call it $PLATFORM
, and run a command like this to install dependencies:
$ pip install -r requirements.$PLATFORM.txt
Or, you could use constraints files. Your requirements.txt
would just list dependencies without versions:
Foo
Bar
Baz
And then you could have a constraints file, again for each platform, that would list specific version requirements. For example, you could have constraints.rhel53.txt
that had this:
Foo==1.1.0
Bar==0.1.0
Baz==2.0.1
And again, you set an env var and then run a command like this:
$ pip install -r requirements.txt -c constraints.$PLATFORM.txt
It's a cumbersome solution, but that would be one way of dealing with it. Unfortunately, pip does not have a native solution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With