Загружайте библиотеки conda data science без извлечения пакетов

#download #data-science #conda

#Скачать #наука о данных #conda

Вопрос:

Я хочу создать среду Python с библиотеками data science NumPy, Pandas, Pytorch и Hugging Face transformers. Я использую miniconda для создания среды, загрузки и установки библиотек. Существует флажок conda install , --download-only позволяющий загружать необходимые пакеты без их установки и устанавливать их впоследствии из локального каталога. Даже когда conda вы просто загружаете пакеты без их установки, они также извлекаются.

Можно ли загружать пакеты, не извлекая их, и извлекать их впоследствии перед установкой?

Комментарии:

1. Может быть, вы можете подробнее рассказать о своей мотивации. Почему вам требуется более детальный контроль над тем, как Conda управляет кэшем пакетов? Какое преимущество должно быть в предотвращении извлечения, если в конечном итоге кто-то собирается установить пакет?

Ответ №1:

В командной строке нет простой команды, чтобы предотвратить этап извлечения. Извлечение рассматривается как часть FETCH операции по заполнению кэша пакетов перед выполнением LINK операции по передаче пакета в указанную среду.

Альтернативой было бы сделать что-то вручную. Наивно, можно было бы выполнить поиск в облаке Anaconda и загрузить вручную, однако, вероятно, было бы лучше пройти через решатель, чтобы обеспечить совместимость пакетов. Всю информацию о выполняемых операциях можно просмотреть, включив --json флаг. Это может быть отфильтровано только для URL-адресов архива, а затем загружено напрямую. Вот сценарий в соответствии с этими строками (при условии, что Linux / Unix):

Файл: conda-download.sh

 #!/bin/bash -l
conda create -dn null --json "$@" |
    grep '"url"' | grep -oE 'https[^"] ' |
    xargs wget -c
 

которые можно использовать как

 ./conda-download.sh -c conda-forge -c pytorch numpy pandas pytorch transformers
 

то есть он принимает все аргументы conda create would и будет загружать все архивы локально.

Игнорирование кэшированных пакетов

Если у вас уже есть некоторые кэшированные пакеты, то вышеуказанное не приведет к их повторной загрузке. Вместо этого, если вы хотите загрузить все архивные файлы, необходимые для среды, вы можете использовать эту альтернативную версию, которая переопределяет кэш пакетов, используя пустой временный каталог:

Файл: conda-download-all.sh

 #!/bin/bash -l
tmp_dir=$(mktemp -d)

CONDA_PKGS_DIRS=$tmp_dir conda create -dn null --json "$@" |
    grep '"url"' | grep -oE 'https[^"] ' |
    xargs wget -c

rm -r $tmp_dir
 

Комментарии:

1. спасибо вам за ваш ответ. Во-первых, я отвечу на вопрос о вашем комментарии в моем вопросе. Я хочу создать docker с минимальным размером и отправить его на удаленный компьютер, у которого нет доступа в Интернет. Итак, я хочу создать docker, который при запуске создаст нужную мне среду, а затем запустит мой скрипт. Поскольку доступа к Интернету не будет, пакеты должны быть уже в docker. Как уже было сказано, я также хочу, чтобы докер был как можно меньше. ….

2. Размер docker имеет большую разницу до и после извлечения загружаемых пакетов. Например, пакеты Pytorch GPU имеют размер 1,3 ГБ, а при извлечении они в конечном итоге превышают 5 ГБ. Если я могу сделать что-то лучше, дайте мне знать

3. У меня не установлено никаких пакетов, поэтому я использовал ваш первый скрипт. Я получаю сообщение об ошибке wget: missing URL Usage: wget [OPTION]... [URL]... , после чего вы также говорите, что «можно использовать с». /conda-download.sh -c conda-forge -c pytorch numpy pandas трансформеры pytorch. Поскольку я не очень разбираюсь в Linux, не могли бы вы быть более подробными?

4. @jsqs суть в том, чтобы предоставить скрипту все пакеты, которые вы хотите установить, и он загрузит все архивные файлы. Пустой запуск скрипта ничего не даст. Я не собираюсь корректировать ответ для решения проблем Docker. Возможно, задайте новый вопрос об этом. Если необходимо использовать Conda в Docker, лучше всего создать среду со всеми пакетами, а затем запустить conda clean —all , чтобы удалить кэш пакетов. Но если вас действительно беспокоит размер изображения Docker, тогда не используйте Conda — это просто удобство.

5. Спасибо @merv, вы были очень полезны. Мне не удалось запустить ./conda-download.sh -c conda-forge -c pytorch numpy pandas pytorch transformers , я получаю ошибки. Я не знаю, проблема в том, что я делаю это через легкий докер (Ubuntu ~ 70 МБ). conda clean --all делает мои контейнеры меньше.