2016-04-03 16 views
0

Ich habe zwei Pakete mit einer gemeinsamen Hierarchie. Etwas wie:Setuptools: Installieren von Paketen mit überlappenden Layouts

org.team.foo:

org/ 
    __init__.py 
    team/ 
     __init__.py 
     foo/ 
      __init__.py 
      baz.py 

org.team.bar:

org/ 
    __init__.py 
    team/ 
     __init__.py 
     bar/ 
      __init__.py 
      qux.py 

setup.py wie folgt aussieht: org.team.foo:

from setuptools import setup, find_packages 
setup(name='foopack', 
     version='1.0', 
     packages=find_packages() 
    ) 

org.team.bar:

from setuptools import setup, find_packages 
setup(name='barpack', 
     version='1.0', 
     packages=find_packages() 
    ) 

würde Ich mag org.team.foo und org.team.bar als unterschiedliche Verteilungen verteilen. Ich weiß, der empfohlene Weg ist, org und team Namespace-Verzeichnisse zu machen. Leider erkennt pylint, das ist ein großer Teil unserer kontinuierlichen Integration Workflow nicht Namespace-Pakete. Ich frage mich, ob ich diese separat verteilen und übereinander installieren kann. Ich habe versucht, diese (sudo pip install foopack && sudo pip install barpack) und es scheint, die folgende in das Installationsverzeichnis zu produzieren:

/usr/local/lib/python2.7/dist-packages/ 
    org/ 
     __init__.py 
     team/ 
      __init__.py 
      foo/ 
       __init__.py 
       baz.py 
      bar/ 
       __init__.py 
       quz.py 

Dies scheint wie erwartet zu funktionieren, mit der Ausnahme, dass, wenn ich foopack deinstallieren, org/__init__.py und org/team/__init__.py werden ebenfalls deinstalliert. Dies ist nichts, was ich in meinem Workflow erwarte, also bin ich damit einverstanden.

Gibt es noch andere Nachteile? Gibt es etwas, das ich nicht in Erwägung ziehe, oder eine Alternative, die ich in Betracht ziehen sollte?

Antwort

0

Die einzige Möglichkeit, zwei Pakete mit gemeinsamer Hierarchie zu installieren, ist die Verwendung des Namespace-Pakets.

Wenn Ihr CI-Server diese nicht behandelt, müssen Sie ihn auf der CI-Seite beheben, da sonst der CI-Server Sie zwingt, Ihr Produkt zu zerstören (was wahrscheinlich nicht das beabsichtigte Ergebnis der Verwendung des CI-Servers ist).

Verwandte Themen