2016-10-03 2 views
3

Я хочу сгенерировать список пакетов, установленных в Python 3, список всех пакетов в Python 2.7 и найти все записи в списке 2.7 , а не в списке Python 3.Использование grep для сравнения двух списков пакетов Python

Создание списка очень просто: pip freeze или pip3.4 freeze.

Поиск пакета в списке столь же тривиальной pip freeze | grep "wheel", например

Однако, если я хочу, чтобы искать пересечения между списком, или в данном случае не являющиеся -пересечений я ожидал бы использовать что-то вроде это pip freeze | grep -n pip3.4 freeze

Однако он говорит мне, что, очевидно, параметр для grep ...is not a file or directory. Мои сценарии оболочки являются ржавыми, и я смутно помню, что должен быть простой способ сделать это, кроме того, что он переводит оба списка в файлы?

+1

'Grep -vf <(пип замораживание) <(pip3.4 замораживание)' – 123

+1

@ 123 Чтобы получить список всех пакетов python2 не в списке Python3 Я думаю, он должен быть 'Grep -vf <(pip3.4 замораживание) <(pip freeze) ' – SLePort

+0

@Kenavoz yeah, tbh, я действительно не прочитал вопрос, просто увидел« Я хочу искать пересечения между списком » – 123

ответ

1

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

comm -12 <(pip freeze) <(pip3.4 freeze) 

для поиска пересечений;

grep -f <(pip freeze) <(pip3.4 freeze) 
+1

Это работает только в том случае, если версии установленных пакетов совпадают, а второй пример обрабатывает '.' имена пакетов или версии в качестве подстановочных знаков. Что-то вроде 'grep -F -x -f <(pip2 freeze | sed 's /==.*//') <(pip3 freeze | sed's /==.*// ')' будет игнорировать номера версий и только для полных строк. – mata

Смежные вопросы