J'ai un ensemble de fonctionnalités assez simple pour lequel j'ai plusieurs implémentations, par exemple, un magasin de données qui pourrait être supporté par Redis, MongoDB ou PostgreSQL. Comment dois-je structurer/écrire mon code pour que le code qui veut utiliser une de ces implémentations n'ait besoin que des dépendances pour cette implémentation, par exemple, ils n'ont pas besoin d'avoir psycopg2
installé s'ils utilisent le backend Redis.Comment ne payer que la pénalité de dépendance pour l'implémentation que vous utilisez en Python?
Voici un exemple. Supposons le module suivant, example.py
.
class RedisExample(object):
try:
import redis
except ImportError:
print("You need to install redis-py.")
def __init__(self):
super(RedisExample, self).__init__()
class UnsatisfiedExample(object):
try:
import flibbertigibbet
except ImportError:
print("You need to install flibbertigibbet-py")
def __init__(self):
super(UnsatisfiedExample, self).__init__()
Voici mon shell Python expérience:
>>> import example
You need to install flibbertigibbet-py
Alternativement:
>>> from example import RedisExample
You need to install flibbertigibbet-py
je vraiment plutôt je n'ai pas eu cette erreur jusqu'à ce que j'ai essayé d'instancier un UnsatisfiedExample
. Existe-t-il un moyen commun d'aborder ce problème? J'ai pensé à faire example
un paquet avec chaque backend obtenir son propre module et en utilisant une fonction d'usine, mais je voulais m'assurer que je ne manquais pas quelque chose de mieux.
Merci.
Après avoir un tel étonnant représentant votre question entière est dans le titre ...? –
Il peut être utile de focaliser le titre et de fournir des détails dans le corps. Les détails aident, un peu de code presque-fonctionnant pour montrer ce que vous souhaitez arriver serait souvent utile. –
Désolé les gars - J'ai un nouveau-né, donc la capacité de se concentrer est ici une minute, parti le lendemain. Je vais essayer de réviser. –