Чому бібліотеки постачаються окремо, а не в комплекті з кожною програмою?


10

Я знаю, чому це добре взагалі: швидше виправлення безпеки, простіша упаковка, більше функцій. Однак я намагаюся переконати деяких колег у тому, що нам не потрібно поєднувати бібліотеку з нашою програмою. Без цієї бібліотеки вона не працюватиме, але бібліотека вже деякий час є стабільною і залишатиметься такою в осяжному майбутньому. Я не бачу причин, щоб НЕ роз'єднати його.

Які аргументи я можу використати, щоб переконати їх?


Моя конкретна ситуація така: я працюю над SymPy , що є бібліотекою відкритого коду для символічної математики з відкритим кодом. Основною його частиною є mpmath , яка є бібліотекою для арифметики з плаваючою точкою з багатозапропонованими умовами . SymPy не працює без mpmath, альтернативи немає. Як такий, він постачався в комплекті з SymPy з самого початку (мені сказали, що зазвичай є невеликі несумісності для виправлення кожного разу, коли імпортується нова версія). Слід також зазначити, що розробник mpmath раніше брав участь у розробці SymPy. Зараз існує проблема щодо роз’єднання mpmath, про це можна прочитати тут .

Підсумовуючи обговорення там:

Роз’єднати:

  • Дещо простіша перенесення на Python 3 (незначний аргумент IMHO)

  • Простіша упаковка для дистрибуції

  • Швидше (безпека) оновлення функцій для користувачів

  • "Залежно від упаковки та обробки - це важкі проблеми, але вони вирішені. Це, безумовно, не сфера, де ми повинні робити свою справу".

Продовжуйте групувати:

  • Установка. На Linux це легко, складніше на Mac і дуже складно в Windows. Відсутність доступу та інші проблеми.

  • він є невід'ємною частиною SymPy, тобто. Симпі без нього не працює (зовсім)

  • не існує іншого пакету, який би міг виконати роботу mpmath

  • "Коли я, як користувач, завантажую sympy, я очікую, що він просто спрацює".


Це моя конкретна ситуація, але я б прийняв відповідь, яка також дає хорошу, загальну відповідь.


Щоб отримати кращу відповідь, вам потрібно надати більше інформації про вашу конкретну ситуацію. Наприклад, яке середовище ви плануєте запустити? Чи буде його піддаватися Інтернету?
tshepang

Ваш додаток з відкритим кодом?
Антон Барковський

@Anton Так, це SymPy , бібліотека Python з відкритим кодом для символічної математики. Я працюю в ньому як студент GSoC (повне розкриття :)).
VPeric

@Tshepang Обговорення можна побачити за адресою: code.google.com/p/sympy/isissue/detail?id=2482
VPeric

@VPeric: Було б дуже приємно підсумувати цю дискусію, просто заощадити час для тих, хто бажає відповісти на ваше запитання.
tshepang

Відповіді:


5

Ще одна відповідь, але одну, яку я вважаю найважливішою (лише моя особиста думка), хоча й інші - це хороші відповіді.

Упакування lib окремо дозволяє оновити lib без необхідності оновлення програми. Скажіть, що це помилка в лібі, замість того, щоб просто оновити її, вам доведеться оновити всю програму. Це означає, що вашій програмі знадобиться помилка версії, навіть якщо її код не змінився, саме через ліб.


1
Це важливий момент, і це частина того, чому багато дистрибутивів не люблять наявність бібліотек у комплекті з програмами; наприклад, Debian має політику не пов’язувати бібліотеку з виконуваним або статично пов’язувати бібліотеку, якщо вона ніколи не може бути використана тільки цією конкретною програмою (або, для статичного зв'язку, тих випадків, коли динамічне посилання не підтримується).
Жил "ТАК - перестань бути злим"

Зрештою, це чи не найважливіший момент. Я погоджуюся і з іншими відповідями, але мені довелося вибрати лише одну. :)
VPeric

6

Крім перелічених вами переваг (безпека, упаковка, особливості), я можу придумати ще кілька:

  • Комусь, хто знайшов би функціонал корисним для іншої програми, не потрібно було б виконувати роботу з її поділу. Тобто вона навіть знає, чи функціональність у вашому проекті існує у першу чергу у вигляді бібліотеки. Це залежить від того, наскільки добре він розроблений ... якщо ваш проект достатньо модульний.

  • У випадку, якщо це корисно для інших проектів, це в цілому зменшить розмір використання диска (наприклад, лише одна копія коду).

  • Це покращило б якість вашого коду, змусивши вас зробити деякий (дуже потрібний) рефакторинг. Як і в першому пункті вище, це також залежить від якості вашого коду.

  • Збільшення кількості користувачів бібліотеки (якщо вона відокремлена) допоможе зробити її більш загальною, що, ймовірно, також покращить її якість.


1
Всі хороші бали. Я припускаю, що це може розглядатися як "захищене майбутнім": мало ваших балів застосовується в даний час (mpmath використовується лише в кількох інших проектах на даний момент), але легко помітити, що кожен ваш бал набирає значення для кожного нового проекту використовуючи mpmath.
VPeric

4

Хоча переваги очевидні, простота розгортання, здається, є головним аргументом для доставки бібліотеки разом із програмою у вашому випадку.

Ось ще кілька аргументів проти пакетування:

  • У Linux це завдання диспетчера дистрибуції - гарантувати, що ваша бібліотека працює добре зі своїми залежностями. Більшість користувачів завантажують бібліотеку за допомогою диспетчера пакунків дистрибутива. Ті, хто використовує багажник, як правило, не проти витрачати час на налаштування бібліотеки.

  • В Windows та Mac OS, менеджери пакетів Python, як-от pip, зазвичай використовуються, так як установка бібліотек вручну є громіздкою.

  • Навіть існували аргументи щодо важкого розгортання в двигуні додатків Google, але не всі веб-рамки працюють на ньому. Багатьом потрібна навіть перенос, дисковий простір для бібліотек обмежений, і все-таки хостинг веб-додатків! Для веб-додатків навряд чи використовувати символічну математику.

  • Ніхто не заважає вам показувати чисті повідомлення про помилки, якщо залежність відсутня або має неправильну версію.

  • Люди часто ненавиджу це, коли програма вважає себе більш розумною, ніж вони. Нехай користувачі подбають про власну систему.


Чи можете ви пояснити останній пункт. Я не можу сказати, чи це аргумент за / проти згуртування.
thepang

3
Я розумію це як проти пакетування - користувачі хочуть встановити те, що хочуть, не змушуйте мене застосовувати певну версію на них.
VPeric

3

Правильний спосіб впоратися розділені через інсталятор Windows матиме випробування preinst для існування бібліотеки, а якщо немає , щоб запропонувати встановити його з пакета бібліотеки , що ви включили в пакет програмного забезпечення установки. Я впевнений, що більшість додатків GTK, у яких є порти Windows, роблять щось у цьому напрямку - я знаю, що це робить pidgin .


3

Один розмір не повинен відповідати всім.

Для розповсюдження джерел, якщо ви використовуєте пакет, що пакують пакунки для багатьох дистрибутивів (принаймні, спадщини Debian і Fedora), доведеться виконати додаткову роботу, щоб вимкнути або вилучити пакет, оскільки політика щодо пакетів для цих платформ забороняє або хоча б сильно перешкоджає комплектуванню. Таким чином, шляхом комплектування ви створюєте більше роботи для своєї нижчої течії з дуже невеликою користю. Чи може цей аргумент мати деяку вагу?

Бінарні дистрибутиви (якщо ви їх надаєте) можуть йти в будь-який бік; Пакетування, ймовірно, має сенс для тих, оскільки вони не використовуються вниз за течією.

Але немає причин, чому ви не можете прийняти протилежне рішення та пакет для інсталяторів Windows та Mac.


1
Хоча я погоджуюся в цілому, це створює додатковий тягар (хоч і невеликий), що означає, що, мабуть, ніхто не підтримає це рішення.
VPeric

2

Зв'язування та залежність - це стара дискусія у світі упаковки. Цей документ розповідає про ці дві школи думки: http://www.aosabook.org/en/packaging.html


2
Це було цікаве прочитання, але воно розповідає більше про деталі реалізації та різні специфіки Python, ніж загальну філософію.
VPeric
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.