Как я могу перечислить все виртуальные среды, созданные с помощью venv? - PullRequest
4 голосов
/ 26 марта 2020

Кто-то только что спросил меня, как составить список всех виртуальных сред, созданных с помощью venv.

. Я мог только подумать о поиске pyvenv.cfg файлов, чтобы найти их. Что-то вроде:

from pathlib import Path

venv_list = [str(p.parent) for p in Path.home().rglob('pyvenv.cfg')]

Это может включать некоторые ложные срабатывания. Есть ли лучший способ составить список всей виртуальной среды, созданной с помощью venv?

Примечание: вопрос касается конкретно venv, НЕ Anaconda, virtualenv, et c.

1 Ответ

3 голосов
/ 27 марта 2020

В Linux / macOS это должно получить большую часть

find ~ -d -name "site-packages" 2>/dev/null

Поиск каталогов под вашим домом, которые называются "site-packages", куда venv помещает свои пип-установленные вещи. бит / dev / null сокращает болтливость вещей, на которые у вас нет прав доступа.

Или вы можете посмотреть особенности конкретного ожидаемого файла. Например, activate имеет nondestructive в качестве содержимого. Тогда вам нужно искать шаблон, который соответствует venv, но не anaconda и остальным.

find ~ -type f -name "activate" -exec egrep -l nondestructive /dev/null {} \; 2>/dev/null

...