2010-12-09 3 views
2

J'ai ce module python de base que nous utilisons dans notre installation appelée mfxLib. Je dois pouvoir garder une version différente de ce module sans casser tous les autres modules/plugins qui importent ce module.Comment maintenir une version différente d'un module python?

Ma solution était de garder un double de mon module en les renommant mfxLib01 et mfxLib02 puis pour remplacer le module mfxLib d'origine avec un module vide contenant uniquement un fichier __init__.py qui importent la dernière version. Cela semble logique et semble fonctionner, mais je me demandais s'il y avait une pratique courante pour ce faire? lignes directrices à suivre? etc

Merci

+0

+1 J'aime votre technique '__init __ .py'. – martineau

Répondre

4

Vous pouvez importer un autre module sous la forme en tant que. Généralement les gens utilisent cette option pour enregistrer en tapant un nom long du module, par exemple:

import numpy as np 
np.array([1,2,3,4]) 

Par conséquent, vous pourriez faire:

import mfxLib01 as mfxLib 

ou

import mfxLib02 as mfxLib 

alors votre code utilise mfxLib partout.

Cela pourrait aider ...

+0

Cela fonctionnerait mais il faudrait beaucoup de modifications de tous les autres modules et plugins qui importent le module. Je voudrais le garder aussi transparent que possible afin que l'importation de mfxLib importera toujours la dernière version. –

0

Si vous avez différents scripts requièrent des versions différentes, votre approche actuelle devrait être le meilleur, mais je suggère d'utiliser un système de contrôle de version comme Git ou SVN. Cela vous permettrait de valider et de revenir facilement aux versions antérieures, ainsi que de partager le module avec d'autres utilisateurs.

+0

Merci, j'utilise déjà git pour le contrôle de version. Je veux avoir plusieurs versions du module en direct sur le réseau afin qu'un plugin puisse charger v01 alors que d'autres plugins utilisent v02. –

0

Le contrôle de version facilitera presque certainement votre vie. En plus des recommandations de Petterson, considérons Mercurial. Comme git et SVN, c'est gratuit. Il est également écrit en Python et devrait fonctionner sans difficulté sur aucun de vos systèmes.

Les recommandations de Spacedman sont également utiles, en particulier si les différences entre les versions représentent des personnalisations pour des systèmes particuliers et que les personnalisations sont relativement stables. Notez que vous pouvez utiliser cette approche en combinaison avec un système de contrôle de version. Enfin, il est toujours utile de faire un gros effort pour écrire votre module afin qu'il puisse fonctionner sans modification partout. Souvent, vous pouvez accomplir cela en ajoutant des arguments optionnels à quelques fonctions clés pour gérer les différentes exigences. Python est vraiment pratique à cet égard, car les arguments des mots-clés à la fin de la liste des arguments sont toujours optionnels, donc vous pouvez facilement organiser le comportement existant en leur donnant des valeurs par défaut appropriées.

def foo(oldarg1, oldarg2, newarg1=None): 
    if newarg1 != None: 
     ## behave differently 
    else: 
     ## behave as usual 
Questions connexes