Создание библиотек с версиями в python

Мы создаем новые филиалы на работе, которые будут иметь одну и ту же библиотеку.

Проблема в том, что если мы обновим одну библиотеку, вы можете разорвать все не обновленные приложения.

Поэтому мы хотели бы изменить наши библиотеки.
Я планировал сделать это либо так

loader.load(name='mylib', version='1.0')

, либо, возможно, так:

import mylib
mylib.load(version='1.0')

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

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

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

Есть ли что-то подобное встроенное в python или любой другой подход, который бы сработал?

Есть ли у кого-нибудь опыт такого рода вещей?


Я могу добавить, что вещи, которые используют libs, являются тестовыми случаями, мы просто хотим, чтобы тестер в ветвь и запустить ./testit.py, ничего другого.


Решение

Решение основано на предложении Гринго Суаве.

class MyClass_1_0:
    def func1(self):
        return 'Baz'

    def func2(self):
        return 'Bar'

class MyClass_1_1(MyClass_1_0):
    # Overwriting a function:
    def func1(self):
        return 'Foo'

    # Definining a new function which uses a function
    # from a previous version:
    def func3(self):
        print("{} {}".format(self.func1(), self.func2()))

# Change this to the latest version for stuff that always wants the latest
class MyClass(MyClass_1_1): pass

Пример использования:

>>> from my.module import MyClass_1_1 as MyClass
>>> m = MyClass()
>>> m.func3()
Foo Bar
-121--1646956- Processing.js - Sleep, Wait, TimeOut, Pause, Delay? Существует ли функция sleep () для Processing.js? Если нет, то что было бы подходящей альтернативой для добавления задержки в цикл draw ()? Я использую JQuery с обработкой - могу ли я использовать JQuery или Javascript...

Существует ли функция sleep () для Processing.js? Если нет, что было бы подходящей альтернативой для добавления задержки в цикл draw ()?

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

Спасибо!

5
задан logic-unit 1 September 2011 в 18:04
поделиться