#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
делает мои контейнеры меньше.