Estou criando um pacote ppa deb para um módulo python, substituindo um pacote pip (que também criei), e gostaria de executar a "desinstalação pip" como parte da instalação deb.
Como posso executar "pip uninstall" como parte da instalação do pacote ppa?
Eu quero fazer isso porque a instalação do pip em / usr / local / lib tem prioridade sobre a instalação do deb em / usr / lib, então os usuários que previamente instalaram com o pip podem estar usando a versão antiga do pip quando instalam o versão deb.
Já experimentei duas coisas, nenhuma das quais funcionou e não sei porquê (quaisquer sugestões de como resolver isto melhor seriam muito apreciadas - tentei "dpkg --log = log.txt -i" mas o log não mostrou nenhuma mensagem de erro de desinstalação pip):
execute a desinstalação do pip no setup.py
from setuptools import setup
from setuptools.command.install import install
import os.path
import subprocess
class CustomInstallCommand(install):
def run(self):
if os.path.exists("/usr/local/lib/python2.7/dist-packages/bamliquidatorbatch"):
print "Old pip bamliquidatorbatch install detected, attempting to remove"
subprocess.call(["pip", "uninstall", "-y", "BamLiquidatorBatch"])
install.run(self)
setup(
...
cmdclass={
'install': CustomInstallCommand,
}
)
Isso funcionou bem quando instalado com o "sudo python setup.py install", mas a desinstalação do pip nunca foi executada quando o pacote foi instalado com o "dpkg -i".
execute a desinstalação do pip no makefile de regras
#!/usr/bin/make -f
%:
dh $@ --with python2 --buildsystem=python_distutils
if [ -d "/usr/local/lib/python2.7/dist-packages/bamliquidatorbatch" ]; then pip uninstall -y BamLiquidatorBatch; echo; fi
Quando eu corri código similar em um makefile diretamente, ele funcionou bem, mas novamente a desinstalação do pip nunca foi executada quando o pacote foi instalado com o "dpkg -i".