Мы устанавливаем новые филиалы на работе, что все будет делиться теми же библиотеками.
Проблема с этим, если мы обновляем одну библиотеку, вы можете сломать все приложения, которые не обновляются.
Поэтому мы хотели бы верситься наши библиотеки.
То, как я планировал делать это либо подобному
loader.load(name='mylib', version='1.0')
или, может быть, как это:
import mylib
mylib.load(version='1.0')
Вопрос в том, как этот погрузчик будет работать.
Наивный подход состоит в том, чтобы каждая версия в своей собственной папке проблему с этим, является то, что если есть общая ошибка во всех версиях, каждая версия должна быть зафиксирована отдельно.
Слегка лучший подход (для ремонтопригодности) состоит в том, чтобы иметь все версии библиотеки в том же файле и вызывать некоторую функцию нагрузки, которая создает ссылки на функции. Я не знаю, насколько это будет хорошо (мы могли бы в конечном итоге с файлом Monster из нескольких тысяч строк, которые могли бы, конечно, удалить старые, неиспользуемые версии).
Чтобы помочь с сохранением количества версий, я планирую только увеличить номер версии, когда я сломаю совместимость, а не при исправлении или добавлении новых материалов.
Есть ли что-то подобное, встроенное в Python или любой другой подход, который будет работать?
У кого-нибудь есть опыт такого рода вещей?
Я могу добавить, что вещи, которые используют Libs Просто хочу тестера к CD в ветку и запустить ./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