2010-08-26 3 views
7

Je m'interroge sur la manière correcte/la plus simple/la plus pythonique de traiter les sous-projets que vous voulez utiliser avec le même paquet de base. Nous avons actuellement une structure de fichier comme ceci:Comment gérer plusieurs sous-projets python avec setuptools?

trunk\ 
    proj1\setup.py 
      company_name\__init__.py + proj1's code 
    proj2\setup.py 
      company_name\__init__.py + proj2's code 

Nous voulons garder l'espace de noms company_name commun à tous nos projets (? Peut-être c'est lui-même unpythonic) mais quand proj1 et proj2 sont installés dans Develop mode, le premier installé est brisé. Il semble que import company_name... soit confondu avec le paquet company_name à regarder et il saisit le premier/dernier/aléatoire.

Comment cela serait-il normalement géré dans un projet python plus important? Est-il possible de résoudre ceci avec un setup.py dans le tronc qui construit une sorte de méga-oeuf? Je n'ai trouvé aucune information pertinente sur google ou stack, donc toute information, même les liens sont grandement appréciés!


edit: Je viens d'essayer d'ajouter un setup.py dans le dossier racine avec

...  
namespace_packages = ['company_name'], 
package_dir = {'company_name' : ['proj1/company_name', 'proj2/company_name']} 
... 

avec pkg_resources.declare_namespace(__name__) approprié dans les __init_.py fichiers, mais ./setup.py bdist_egg donne juste:

erreur Commande d'installation company_name: La distribution ne contient aucun module ou package pour le package d'espace de noms 'company_name'

Répondre

6

Bien que je ne puisse pas garantir la pythonité de ma solution, j'ai finalement réussi à faire fonctionner les différentes applications ensemble. J'étais sur la bonne voie avec les paquets d'espaces de noms, mais au lieu d'essayer d'avoir un super-projet dans le coffre, j'ai ajouté la ligne namespace_packages dans le setup.py de chaque projet individuel. Cela a conduit à un comportement correct une fois installé ensemble, partageant l'espace de noms company_name comme prévu.

Toute personne qui veut se prononcer sur cette question est une solution python raisonnable, je suis toujours intéressé d'entendre si c'est "la façon dont c'est fait". C'est normal, mais cela pourrait être parce qu'il imite le style java auquel je suis habitué.

+3

C'est pour cela que j'ai conçu le mot-clé 'namespace_packages', et vous l'avez donc fait de la bonne façon. –

+0

Ma société a commencé à utiliser des packages d'espaces de noms et cela a fini par être une énorme erreur avec beaucoup de fonctionnalités qui sont cassées avec eux et qui sont disponibles dans des projets normaux (tests unitaires, installations difficiles, etc). Juste un mot d'avertissement. – Lucas

Questions connexes