Skip to content

Instantly share code, notes, and snippets.

@luiscape
Created January 16, 2017 14:36
Show Gist options
  • Select an option

  • Save luiscape/19d2d73a8c7b59411a2fb73a697f5ed4 to your computer and use it in GitHub Desktop.

Select an option

Save luiscape/19d2d73a8c7b59411a2fb73a697f5ed4 to your computer and use it in GitHub Desktop.
Install Python dependency packages from requirements.txt using conda.
#
# Original solution via StackOverflow:
# http://stackoverflow.com/questions/35802939/install-only-available-packages-using-conda-install-yes-file-requirements-t
#
#
# Install via `conda` directly.
# This will fail to install all
# dependencies. If one fails,
# all dependencies will fail to install.
#
conda install --yes --file requirements.txt
#
# To go around issue above, one can
# iterate over all lines in the
# requirements.txt file.
#
while read requirement; do conda install --yes $requirement; done < requirements.txt
@redx177

redx177 commented Dec 13, 2017

Copy link
Copy Markdown

What do you mean with the "second one"? The second command? The second parameter?
Why line 19 is used is described in the comments above it.

@draskell

Copy link
Copy Markdown

This is really useful, I have recently found out about the environment.yml approach for managing dependencies with conda through a stack overflow question: here. I'm wondering if you could expand this script to create an environment yaml or write out a pip-requirements.txt file as it goes through the lines?

One suggested improvement was to catch the errors:
while read requirement; do conda install --yes $requirement; done < requirements.txt 2>error.log

@aleksod

aleksod commented Jan 25, 2018

Copy link
Copy Markdown

This is great! Thank you!

@bit-scientist

bit-scientist commented Mar 24, 2018

Copy link
Copy Markdown

I am in the conda env and the conda install --yes --file requirements.txt failed. Now, here you gave a solution: while read requirement; do conda install --yes $requirement; done < requirements.txt

Where is that snippet inserted? Should I change requirements.txt file or what?

I am a windows user btw

@No-Stream

Copy link
Copy Markdown

@git-sohib you just run that from your directory that contains the requirements.txt file. (If it's not named requirements.txt, you can change the filename in that command.)

Note that the command installs packages one at a time, so it's a bit slower than batch installing, but it doesn't fail if Conda encounters some errors. (For instance, if a package isn't available as a Conda package, then the install fails.) You may want to try the simpler conda install --yes --file requirements.txt if you expect the packages to be available.

@dror-kris

Copy link
Copy Markdown

I'm trying to run the command, but receive the error:
'while' is not recognized as an internal or external command, operable program or batch file

image

What am I missing?

@vickylance

Copy link
Copy Markdown

@dror-kris That is a sh file meant to run on a linux as a bash script. Not on windows.

@makmanalp

Copy link
Copy Markdown

One potential issue with this is that when you install each package individually, conda won't have a unified view of what version of everything you're installing and whether their subdependencies conflict, so the later packages you install might override things that earlier packages installed (I think?)

@tgandor

tgandor commented Sep 20, 2018

Copy link
Copy Markdown

I hope they fix this in the conda command, if this is really the case (maybe it's a problem with some packages' dependencies specification rather than conda), because conda says:
conda install --help (...) --file FILE Read package versions from the given file. Repeated file specifications can be passed (e.g. --file=file1 --file=file2). --no-deps Do not install, update, remove, or change dependencies. This WILL lead to broken environments and inconsistent behavior. Use at your own risk. --only-deps Only install dependencies.

This means, it should acually handle the deps.

BTW, the second part is a plain bash loop. In Windows it's done like this:

for /f %i in (requirements.txt) do conda install --yes %i - when run manually
for /f %%i in (requirements.txt) do conda install --yes %%i - when inside a BAT script.

@rohitpattnaik

Copy link
Copy Markdown

Perfect .. worked for me .. thanks

@ShixiangWang

Copy link
Copy Markdown

This should delete comment lines firstly.

@IbnNafis007

Copy link
Copy Markdown

I hope they fix this in the conda command, if this is really the case (maybe it's a problem with some packages' dependencies specification rather than conda), because conda says:
conda install --help (...) --file FILE Read package versions from the given file. Repeated file specifications can be passed (e.g. --file=file1 --file=file2). --no-deps Do not install, update, remove, or change dependencies. This WILL lead to broken environments and inconsistent behavior. Use at your own risk. --only-deps Only install dependencies.

This means, it should acually handle the deps.

BTW, the second part is a plain bash loop. In Windows it's done like this:

for /f %i in (requirements.txt) do conda install --yes %i - when run manually
for /f %%i in (requirements.txt) do conda install --yes %%i - when inside a BAT script.

Great

@SpyderAlba

Copy link
Copy Markdown

conda install --file requirements.txt

@oskar-j

oskar-j commented Feb 26, 2019

Copy link
Copy Markdown

Yes @SpyderRivera seems like they've added this recently

@pradyumnasagar

Copy link
Copy Markdown

what to do if the packages in requirement.txt are from different channel?

@abhatnag

abhatnag commented Apr 2, 2019

Copy link
Copy Markdown

@pradyumnasagar append to the list of channels that conda will search for. For instance, if you want to use conda-forge:
conda config --append channels conda-forge

ghost commented Jun 27, 2019

Copy link
Copy Markdown

Thanks luiscape, for the tip on solving the requirements.txt with conda.

@FhyTan

FhyTan commented Aug 8, 2019

Copy link
Copy Markdown

Thanks, an elegant way to make pip list compatible in Conda environment.

@hmwasita

hmwasita commented Nov 6, 2020

Copy link
Copy Markdown

I hope they fix this in the conda command, if this is really the case (maybe it's a problem with some packages' dependencies specification rather than conda), because conda says:
conda install --help (...) --file FILE Read package versions from the given file. Repeated file specifications can be passed (e.g. --file=file1 --file=file2). --no-deps Do not install, update, remove, or change dependencies. This WILL lead to broken environments and inconsistent behavior. Use at your own risk. --only-deps Only install dependencies.

This means, it should acually handle the deps.

BTW, the second part is a plain bash loop. In Windows it's done like this:

for /f %i in (requirements.txt) do conda install --yes %i - when run manually
for /f %%i in (requirements.txt) do conda install --yes %%i - when inside a BAT script.

Thanks, It worked for me

@Fahad021

Copy link
Copy Markdown

conda install --file requirements.txt

does not work

@Fahad021

Copy link
Copy Markdown

I hope they fix this in the conda command, if this is really the case (maybe it's a problem with some packages' dependencies specification rather than conda), because conda says:
conda install --help (...) --file FILE Read package versions from the given file. Repeated file specifications can be passed (e.g. --file=file1 --file=file2). --no-deps Do not install, update, remove, or change dependencies. This WILL lead to broken environments and inconsistent behavior. Use at your own risk. --only-deps Only install dependencies.
This means, it should acually handle the deps.
BTW, the second part is a plain bash loop. In Windows it's done like this:
for /f %i in (requirements.txt) do conda install --yes %i - when run manually
for /f %%i in (requirements.txt) do conda install --yes %%i - when inside a BAT script.

Thanks, It worked for me

worked.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment