Как я могу выполнить произвольные команды как часть deb установки пакета?

Я создаю 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".

1
задан 3 October 2014 в 11:22

1 ответ

Даже если действительно не рекомендуется удалить тихо пакет в /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).

0
ответ дан 7 October 2019 в 00:33

Другие вопросы по тегам:

Похожие вопросы: