Я создаю ppa deb пакет для модуля Python, заменяя пакет зернышка (который я также создал), и я хотел бы выполнить "удаление зернышка" как часть deb установки.
Как я могу выполнить "удаление зернышка" как часть ppa установки пакета?
Я хочу сделать это, потому что установка зернышка в/usr/local/lib берет приоритет над установкой deb в/usr/lib, таким образом, пользователи, которые ранее установили с зернышком, могли неумышленно использовать старую версию зернышка, когда они устанавливают deb версию.
Я уже попробовал две вещи, ни одна из которых работавший и я не знаю, почему (любые предложения для того, как диагностировать это лучше, значительно ценились бы - я попробовал "dpkg --log=log.txt,-i", но журнал не показал, что любое зернышко удаляет сообщения об ошибках):
A. выполните удаление зернышка в 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,
}
)
Это хорошо работало при установке с "sudo Python setup.py установка", но удаление зернышка никогда не работало, когда пакет был установлен с "dpkg-i".
B. выполните удаление зернышка в make-файле правил
#!/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
Когда я выполнил подобный код в make-файле непосредственно, он хорошо работал, но снова победите удаление, никогда не работал, когда пакет был установлен с "dpkg-i".
Даже если действительно не рекомендуется удалить тихо пакет в /usr/local
, Вы могли бы сделать это в debian/bamliquidatorbatch.preinst
сценарий:
#!/bin/sh
set -e
if [ -d "/usr/local/lib/python2.7/dist-packages/bamliquidatorbatch" ]; then
pip uninstall -y BamLiquidatorBatch;
fi
Примечание, что bamliquidatorbatch
должно быть точное название Вашего debian двоичного пакета (для соответствия debian/bamliquidatorbatch.preinst
).