2017-09-04 6 views
0

Stellen Sie sich das folgende Szenario vor: Sie haben ein Python-Paket mit dem Namen 'foo', das von 'bar' abhängt. Das Paket "bar" selbst hängt von einem anderen Python-Paket ab, sagen wir formschön, das hängt von einer C-Bibliothek ab, die cannot be installed on readthedocs.io ist. Daher versperrt "Bar" formschön durchMock-out-Abhängigkeit einer Abhängigkeit

in der Datei conf.py.

Nun möchte ich nur die Abhängigkeit formschön aus 'bar' verspotten, aber immer noch 'bar' auf RTD installieren, um die Dokumente von 'foo' richtig erstellen zu lassen. Wie kann ich readthedocs.io sagen, um die Abhängigkeit der Leiste formschön zu simulieren?

Antwort

2

Check für Umgebungsvariable READTHEDOCS:

import os 
if 'READTHEDOCS' in os.environ: 
    class Mock(MagicMock): 
     @classmethod 
     def __getattr__(cls, name): 
       return MagicMock() 

    MOCK_MODULES = ['shapely', 'shapely.wkt', 'shapely.wkb', 'shapely.geometry', 'shapely.ops'] 
    sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) 
+0

Danke für den Hinweis! Um es genauer zu verstehen. Würden Sie empfehlen, diese Prüfung für die Abhängigkeitsleiste im oben beschriebenen Szenario hinzuzufügen? Daher würde ich mich nicht selbst verspotten, aber "Bar's conf.py verspottet formschön, richtig? – gplssm

+0

Das sollte funktionieren. Sie können das lokal testen, indem Sie die kompilierte Erweiterung entfernen und die Umgebungsvariable 'READTHEDOCS' selbst übergeben. – phd

+0

Eigentlich verstehe ich nicht, wie man es lokal testen :(. Aber ich versuchte Ansatz von 'wenn 'READTHEDOCS' in os.environ:' mit RTD vorgeschlagen. Leider hatte es keine Wirkung. Das Problem ist immer noch, dass ich habe "bar" als erforderliche Abhängigkeit in der rtd_requirements.txt angeben, um mein Paket auf RTD zu installieren. Dann löst "bar" die Installation von formschön aus und der ganze Prozess schlägt fehl. Ich denke mein Problem ist, dass ich nicht genug habe Verständnis, wie dieses Mocking funktioniert Hat es Auswirkungen auf den Installationsvorgang auf RTD? – gplssm

Verwandte Themen