2015-08-10 4 views
15

Wie ist es möglich, mehrere Python-Module zu erstellen, die denselben Namespace für Python 2.7+ und 3.3+ verwenden?Python 2 & 3 kompatible Namespace-Module (mit Pip)

Nennen wir den Namensraum test. Jetzt möchte ich zwei separate Module haben, die test.foo genannt werden und eine andere, die test.bar genannt wird. Ich entwickle jedoch derzeit test.helloworld, was sowohl von test.foo als auch von test.bar abhängt. Beide sind in der requirements.txt Datei aufgeführt.

Die Module test.foo und test.bar sind die Python 2 solution für Namespace-Pakete derzeit verwenden:

import pkg_resources 
pkg_resources.declare_namespace(__name__) 

Ausführen des suggested pip-command for development modepip install -e . verwandelt sich in: ImportError: No module named 'test.helloworld' während test.foo oder test.bar Import funktioniert.

Die Python 3 solution für Namespace-Pakete sind Implicit-Namespace-Pakete wo die Namespace-Paket keine __init__.py Datei hat. Dies funktioniert leider nicht für Python 2-Versionen.

Wie kann ich eine Lösung für beide Python 2 und 3 (die mir erlaubt, pip install -e . zu verwenden) entwerfen? Die --egg Lösung funktioniert nicht für mich, da es bereits veraltet ist.

Antwort

0

Siehe Antwort auf similar question für eine vollständige Anleitung, die auf beiden Pythons 2 und 3.

Kurz gesagt funktioniert, setup.py Bedürfnisse einzigartige Namen für jedes Modul und eine gemeinsamenamespace_packages Definition zusätzlich zu __init__.py haben Deklarieren des Namespace, der auf namespace_packages festgelegt wird.

Wenn Sie immer noch Probleme haben, senden Sie bitte Ihre setup.py und __init__.py für jedes Modul.