Eu escrevi um script python ( link gist ) que verifica todos os pacotes python se eles foram instalados com pacman
.
instalação
Faça o download do script e torne-o executável:
$ wget https://gist.github.com/hoefling/314565368a66c308b4d7d407a3028cb7/raw/7b81553fa0a84b92a90fbaa0746482d0ec18516c/pip-query -O pip-query
$ chmod +x pip-query
uso
Veja um exemplo chamando-o em um contêiner do tipo de janela base/archlinux
em que instalei python-pip
e python-wheel
:
$ ./pip-query
Package Version Owner
---------- ------- -----------------
appdirs 1.4.3 python-appdirs
packaging 17.1 python-packaging
pip 9.0.1 python-pip
pyparsing 2.2.0 python-pyparsing
setuptools 39.2.0 python-setuptools
six 1.11.0 python-six
wheel 0.31.1 python-wheel
A saída se parece com a saída de pip list --format=columns
, mas com uma coluna adicional Owner
que imprime o nome do pacote do sistema que possui o pacote python.
Vamos testar com um pacote instalado diretamente com pip
:
$ sudo pip install tqdm
...
$ ./pip-query
Package Version Owner
---------- ------- -----------------
appdirs 1.4.3 python-appdirs
packaging 17.1 python-packaging
pip 9.0.1 python-pip
pyparsing 2.2.0 python-pyparsing
setuptools 39.2.0 python-setuptools
six 1.11.0 python-six
tqdm 4.23.4
wheel 0.31.1 python-wheel
A coluna Owner
tem uma célula vazia em tqdm
row, isso indica que tqdm
não foi instalado por pacman
. Desinstale tqdm
com pip
:
$ sudo pip uninstall -y tqdm
e instale-o com pacman
:
$ pacman -S python-tqdm
instalação permanente
Se você quiser, coloque o arquivo pip-query
em algum lugar no seu PATH
, de preferência algo local como $HOME/.local/bin
para chamá-lo como um executável adequado com
$ pip-query
adaptando para outros gerenciadores de pacotes
Deve ser muito fácil adaptar o script para uso com outros gerenciadores de pacotes, se você quiser. Por exemplo, se eu alterar ['pacman', '-Qqo', file]
para ['qfile', '-q', file]
, o script funcionará no Gentoo sem qualquer modificação adicional *. Se o gerenciador de pacotes não oferecer suporte à impressão de nome de pacote puro, extraia as informações relevantes da string out
com regex ou o que for.
reinstalar lotes em lote com pacman
Você pode modificar pip-query
ou seguir a filosofia Unix e escrever algum comando bash que faça a reinstalação para você. No entanto, você tem que lidar com várias sugestões feitas por pacman
(como no exemplo abaixo) e implementar o caso quando nada foi sugerido. Aqui está minha tentativa humilde (não um especialista em bash):
$ ./pip-query | tail -n +3 | while read line ; do split=(${line}); \
> if [ "${#split[@]}" -eq "2" ]; then pkgname=${split[0]}; \
> echo -e "Suggestion: pip uninstall -y $pkgname && pacman -S $(pacman -Sspq $pkgname | tr '\n' ' ')"; \
> fi; done
Suggestion: pip uninstall -y tqdm && pacman -S python-tqdm python2-tqdm
Aprimore isso e você tem uma solução automatizada para reinstalar tarefas.
*: assumindo que app-portage/portage-utils
foi criado.