Почему различные дистрибутивы Linux используют различные диспетчеры пакетов?

Похоже, проблема заключалась в том, что первый вызов PyArg_ParseTupleAndKeywords() установил индикатор ошибки, который вызвал сбой второго вызова функции. Поэтому решение состоит в том, чтобы вставить вызов на PyErr_Clear() между вызовами на PyArg_ParseTupleAndKeywords(). Таким образом, следующий код выполняет задачу

static PyObject* my_func(PyObject *self, PyObject *args, PyObject *kwargs)  {
   double a;          // first argument, required 
   double b=0, c=0;   // second argument, required but mutually exclusive, b is default keyword if no keyword is set
   char d[] = "...";  // third argument, optional

   // parse arguments
   static const char *kwList1[] = {"a","b","c","d"};
   static const char *kwList2[] = {"a","b","d"};
   int ret;
   if (!(ret = PyArg_ParseTupleAndKeywords(args,kwargs,"d|dds",(char **)kwList1,&a,&b,&c,&d))) {
      PyErr_Clear();
      ret = PyArg_ParseTupleAndKeywords(args,kwargs,"d|ds",(char **)kwList2,&a,&b,&d));
   }
   if (!ret) return NULL;

   // verify that one of, but not both, variables b and c are non-zero
   if (b==0 && c==0) {
      PyErr_SetString(PyExc_TypeError,"Required mutually exclusive arguments 'b' or 'c' (pos 2) not found (or input with value 0)");
      return NULL;
   } else if (b!=0 && c!=0) {
      PyErr_SetString(PyExc_TypeError,"Use of multiple mutually exclusive required arguments 'b' and 'c' (pos 2)");
      return NULL;
   }

   ...

}

. Опять же, это не защищает от вызова функции с обоими аргументами b и c, учитывая, что один из них равен 0, а другой не. Однако это небольшая проблема.

8
задан Ali Afshar 10 November 2008 в 16:13
поделиться

7 ответов

Как большинство вещей в мире UNIX, где существуют дублирования поведения, это - комбинация многих вещей, но главным образом история, политика/религия и требование создать лучшую мышеловку / синдром NiH. Существование нескольких система compononents, которые выполняют эквивалентные задачи, часто хвалят как полезная функция сторонниками с открытым исходным кодом.

Вообще говоря главным образом необходимо взволновать приблизительно четыре аромата системы управления пакета. У Вас есть полученные системы debian, как debian, человечность, которые используют .deb и apt/dpkg семейство инструментов управления. У Вас есть полученные системы Redhat, которые используют .rpm формат и об/мин / вкусное семейство инструментов управления. Функция, мудрая, они оба широко эквивалентны, по-моему.

Важная вещь, пытаются изучить набор инструментов, с которым Вы работаете хорошо, они все хорошо документируются. Узнайте о том, как проверить зависимости и проверить подписи пакета и целостность, и узнать, какие услуги пакет предоставляет, и с другой стороны какой пакет ответственен за конкретный установленный файл или программу, с помощью собственных инструментов пакета для предпочтительного распределения. Идеально изучите параметры командной строки, чтобы сделать это для конфетки и об/мин и затем dpkg и способность, и у Вас будет большинство оснований охваченным. Затем используйте инструменты GUI, если Вы предпочитаете.

Я думаю, что самая важная вещь помнить состоит в том, что это обычно - ошибка смешать пакеты от различных дистрибутивов или выпусков в той же системе, даже если они используют тот же формат пакета, например, не устанавливают debian .deb файлы в Вашей системе человечности или файлы об/мин SuSE в Вашей системе Fedora, если Вы действительно не понимаете то, что Вы делаете.

Другие два аромата, которые я упомянул, являются менее основными, но я перечисляю их для пользы полноты. Это

  • a) никакая система пакета за пределами двоичного файла/источника tarball а-ля классический slackware, и

  • b) исходные инструменты сборки смоделированы после портов BSD, а-ля классический хинду.

Снова, Вы не хотите быть здесь, пока Вы не понимаете, почему Вы могли бы хотеть, по-моему.

14
ответ дан 5 December 2019 в 08:01
поделиться

Историческая инерция.

2
ответ дан 5 December 2019 в 08:01
поделиться

В некоторых случаях это просто, что производители дистрибутива предпочитают одну систему управления пакета другому. Хорошей вещью о Linux является выбор, и несколько систем управления пакета означают больше выбора.

-1
ответ дан 5 December 2019 в 08:01
поделиться

Некоторые действительно совместно используют диспетчер пакетов. Я использовал Кв. на нескольких дистрибутивах. Некоторым дистрибутивам нужно что-то более характерное для их философии. Например, хинду нужно что-то, что захватывает источник и компиляции вместо того, чтобы просто установить двоичный файл.

0
ответ дан 5 December 2019 в 08:01
поделиться

Исторические причины. Точно так же Вы могли спросить, почему существует несколько компаний, предоставляющих подобные услуги, когда всего одна компания могла быть более эффективной в целом.

См. http://kitenet.net/~joey/pkg-comp/ для сравнения различных форматов пакета с точки зрения разработчика Debian. Также обратите внимание, что можно использовать программу, названную чуждой для установки пакета одного вида на других видах систем. Это не прекрасно, но помогает, когда поставщик поставляет программное обеспечение в "неправильном" формате пакета для Вашего выбранного дистрибутива.

6
ответ дан 5 December 2019 в 08:01
поделиться

Существует также много различных текстовых редакторов, настольные среды и так далее. Различные дистрибутивы совместно используют это только, потому что они предоставляют все эти программы.

Но они должны решить для одного диспетчера пакетов. Другой диспетчер пакетов не знал бы о программном обеспечении, установленном другим диспетчером пакетов. Таким образом, дистрибутивы решают для одного или разрабатывают один themself, адаптированный в соответствии с их определенными потребностями.

Двумя очень общими диспетчерами пакетов является об/мин и Кв., которые оба используются различными дистрибутивами.

-1
ответ дан 5 December 2019 в 08:01
поделиться

Fedora использует и APT и КОНФЕТКУ теперь, у них есть немного аннотации об этом на их Wiki, когда они начали делать Fedora, они выбрали YUM, потому что APT не имел никаких обновлений некоторое время, и они поддерживают APT теперь, но значение по умолчанию к КОНФЕТКЕ потому что, именно это использует установщик Анаконды.

1
ответ дан 5 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

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