Question

Je me demande sur la façon correcte / facile / les plus pythonique de faire face à des sous-projets que vous voulez avoir en utilisant le même package de base. Nous avons actuellement une structure de fichier comme ceci:

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

Nous voulons garder le bon espace de noms company_name à tous nos projets (peut-être lui-même est ce unpythonic?) Mais quand proj1 et proj2 sont installés dans le mode développement, le premier installé est cassé. On dirait que import company_name... est confus sur quel paquet company_name regarder et il saisit le premier / dernier / un hasard.

Comment cela serait normalement traitée dans un projet de python plus grand? Est-il possible de résoudre ce avec un setup.py dans le coffre qui construit une sorte de méga-oeuf? Je n'ai trouvé aucune information pertinente sur Google ou pile, de sorte que toute information, même simplement les liens sont très 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ée dans les fichiers __init_.py, mais ./setup.py bdist_egg donne juste:

  

erreur dans la commande d'installation company_name: distribution ne contient pas de modules ou des packages pour le paquet d'espace de noms 'company_name'

Était-ce utile?

La solution

Alors que je ne peux pas se porter garant pour la pythonity de ma solution, je ne reçois enfin les différentes applications en cours d'exécution ainsi que bien. J'étais sur la bonne voie avec les packages d'espace de noms, mais au lieu d'essayer d'avoir un super-projet dans le coffre, j'ai ajouté la ligne de namespace_packages dans le setup.py de chaque projet individuel. Cela a conduit à la comportement anormal lorsqu'il est installé ensemble, en partageant l'espace de noms company_name comme prévu.

Celui qui veut carillon sur ce wether est une solution de python raisonnable, je suis toujours intéressé à entendre si cela est « la façon dont il est fait ». Il se sent bien, mais cela pourrait être parce qu'il imite le style java je suis plus habitué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top