Поиск в средах анаконды сред, в которых установлен определенный пакет - PullRequest
0 голосов
/ 10 октября 2019

Я отправил вопрос в библиотеку Python с открытым исходным кодом и получил ответ, что разработчики не смогли воспроизвести ошибку. Я установил пакет в среду conda, и я хочу выяснить, в какие среды я установил пакет, чтобы попытаться воспроизвести проблему в исходной среде. Проблема в том, что у меня есть несколько conda envs, чтобы проследить, и моя текущая стратегия "активировать среду -> запустить интерпретатор python -> попытаться импортировать пакет -> выйти из интерпретатора -> деактивировать среду" устарела.

Есть ли простой способ перечислить все среды, которые содержат определенный пакет? Что-то вроде:

conda info --envs --package=PackageName

РЕДАКТИРОВАТЬ: я выяснил, как проверить, установлен ли пакет в любой моей среде. По-прежнему не предупреждает, в какой среде находится пакет, просто показывает мне, если пакет существует:

Continuum/anaconda3/condabin/conda.bat info --envs | awk '{print $1}' | xargs -ix Continuum/anaconda3/condabin/conda.bat list -n x | grep packagename

Это на машине с Windows, с использованием оболочки git bash, с установленным рабочим каталогом. на /c/Users/userName/AppData/Local

РЕДАКТИРОВАНИЕ2: Вот мое окончательное решение:

echo Continuum/anaconda3/envs/*/lib/site-packages/PACKAGENAME | sed -E 's/[^ ]+envs\/([^/]+)\/lib[^ ]+/\1/g' | tr " " "\n"

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Если это пакет Python, то быстрая и грязная будет

echo Continuum/anaconda3/envs/*/lib/python*/site-packages/packagename

, чтобы перечислить все места, где он установлен (исключая base ). Если вам нужно только имя, вы можете извлечь его ...

echo Continuum/anaconda3/envs/*/lib/python*/site-packages/packagename |\
sed -E 's/[^ ]+envs\/([^/]+)\/lib[^ ]+/\1/g'
1 голос
/ 10 октября 2019

Что касается использования Anaconda Navigator, то здесь есть список установленных плагинов. (Не уверен, что это будет быстрее, загрузка пакетов иногда занимает много времени.)

Это может работать даже для деактивированных сред:

# conda env list ## to list all environments
conda list -n myenv packagename

(И, вероятно, глупый вопрос: простой grep дляимя пакета не будет работать?)

РЕДАКТИРОВАТЬ: на основе вашего последнего редактирования:

Continuum/anaconda3/condabin/conda.bat info --envs | awk '{if ($1 != "#") {print $1}}' | xargs -ix Continuum/anaconda3/condabin/conda.bat list -n x packagename | grep -B 3 packagename

(- B 3 печатает 3 строки перед совпадением, измененная команда awk немного пропускает '#' envs. Добавлено имя пакета в список, иначе взлом с -B 3 не сработает)

...