Frage

Ich frage mich, über die richtige / einfachste / meisten pythonic Art und Weise mit Teilprojekten zu tun, dass Sie wollen die gleiche Basis-Paket. Wir haben im Moment eine Dateistruktur wie folgt aussehen:

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

Wir wollen alle unsere Projekte den Namespace company_name gemeinsam halten (vielleicht selbst das ist unpythonic?), Aber wenn proj1 und proj2 in der Entwicklung Modus installiert sind, installiert die erste kaputt geht. Es sieht aus wie import company_name... auf verwechselt wird, was company_name Paket suchen in und es packt die erste / letzte / random ein.

Wie würde dies in der Regel in einem größeren Python-Projekt behandelt werden? Ist es möglich, dies mit einem setup.py im Kofferraum zu lösen, die eine Art von Mega-Ei baut? Ich habe festgestellt, keine relevanten Informationen über Google oder Stapel, so dass Informationen auch nur Links sehr geschätzt werden!


edit: Ich habe gerade versucht, eine setup.py im Stamm Hinzufügen Ordner mit

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

mit entsprechenden pkg_resources.declare_namespace(__name__) in den __init_.py Dateien, aber ./setup.py bdist_egg gibt nur:

  

Fehler in company_name Setup-Befehl: Verteilung enthält keine Module oder Pakete für Namespace-Paket 'company_name'

War es hilfreich?

Lösung

Während ich nicht für die pythonity meiner Lösung bürgen kann, ich habe endlich die verschiedenen Anwendungen zusammen gut läuft. Ich war auf dem richtigen Weg mit den Namespace-Paketen, aber anstatt zu versuchen, ein super-Projekt in dem Kofferraum zu haben, ich die namespace_packages Linie in den setup.py jedes einzelnen Projekt hinzugefügt. Dies führt zu dem verhalte richtig installiert, wenn sie zusammen, den company_name Namensraum teilen, wie beabsichtigt.

Wer zu läuten will auf, ob dies ist eine vernünftige Lösung Python, ich bin immer noch daran interessiert zu hören, wenn diese „die Art, wie es gemacht wird“ ist. Es fühlt sich richtig, aber das könnte sein, weil es ahmt den Java-Stil, den ich mehr gewohnt bin.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top