Kraft bestimmten Ei Verzeichnisse entpacken
-
21-09-2019 - |
Frage
Ich habe ein Ei Verteilung einer PyQt Anwendung, die ich mir selbst zu bauen, und es enthält Sphinx generierte Dokumentation. Wenn ich die Hilfedatei von der Anwendung aufrufen, öffnet es die Sphinx index.html in einem QtWebKit.QWebView Fenster. Offenbar nur die Datei index.html aus dem Ei in das Ei-Verzeichnis des OS extrahiert wird (zum Beispiel [..] \ Anwendungsdaten \ Python-Eggs \ unter Windows).
Dies führt in gebrochenem css, gebrochen Bilder und defekte Links, da diese anderen Dateien scheinen nicht ausgepackt zu erhalten; sie sind in der Ei-Datei, aber nicht in dem Ei-Verzeichnis.
Bin ich etwas fehlt hier? Gibt es eine Möglichkeit alle HTML zu zwingen, Auspacken, CSS, Bilddatei sofort?
Lösung
Ich sehe, dass Sie bereits einen anderen Weg gefunden, es zu tun, sondern auch für die Zukunft, hier ist die Nicht-Umgehung, wie es automatisch zu tun, von der Dokumentation unter http://peak.telecommunity.com/DevCenter/setuptools#automatic-resource-extraction [Hervorhebung hinzugefügt]:
Wenn Sie Tools verwenden, die Ihre Ressourcen erwarten „echte“ Dateien zu sein, oder Ihr Projekt enthält Nicht-Erweiterung nativen Bibliotheken oder andere Dateien, dass Ihre C-Erweiterungen für den Zugriff erwarten zu können, können Sie diese Dateien auflisten müssen in das eager_resources Argument setup (), so, dass die Dateien zusammen extrahiert werden
Also, in diesem Fall, was Sie zu tun haben:
eager_resources=['doc/sphinx/build/html', 'doc/sphinx/build/html/index.html']
in Ihrem setup.py, die das ‚html‘ Verzeichnis werden dazu führen, dass rekursiv extrahiert werden, wenn Sie für die index.html fragen (unter der Annahme, dass ‚doc‘ in Ihrem Beispiel ist ein Top-Level-Paket).
(Sie können mehr über die eager_resources
Stichwort in der Dokumentation erfahren Sie http://peak.telecommunity.com/DevCenter/setuptools#new-and-changed-setup-keywords )
Andere Tipps
def get_help_url(self):
from pkg_resources import resource_filename
from doc import sphinx
import os
from PyQt4.QtCore import QUrl
html_path = resource_filename(sphinx.__name__, os.path.join('build', 'html'))
return QUrl(os.path.join(html_path, 'index.html'))
statt
html = resource_filename(sphinx.__name__, os.path.join('build', 'html', 'index.html'))
return QUrl(html)
hat den Trick
Mögliche Ursache:. Nicht alle Dateien in das Ei in erster Linie enthalten
-
Überprüfen Sie dies, indem Sie die .egg unzipping (man könnte es zu einer ZIP-Datei umbenennen müssen für die auf Windows). Überprüfen Sie, ob alle Inhalte sind.
-
Lesen Sie, wie Sie das Ei gemacht. Verwenden Sie ein MANIFEST.in Datei Setuptools zu sagen, welche Dateien enthalten? Wenn nicht, sind zu vertrauen Sie wahrscheinlich auf Setuptools automatische Aufnahme von Subversion-Dateien. Alle subversion'ed Dateien automatisch in das Ei am Ende, Python-Dateien tun, der Rest nicht.
-
Die Sphinx-Dokumentation ist wahrscheinlich erzeugt, so dass es nicht in Subversion ist, so dass es nicht automatisch eingeschlossen bekommt.
Zwei Lösungen:
-
Verwenden Sie eine MANIFEST.in Datei manuell angeben (Platzhalter funktionieren), um alle Dateien, die aufgenommen werden sollten. Failsafe, solange Sie sind abgeschlossen.
-
oder die HTML-Dateien als package_data angeben, finden Sie unter Wie Setuptools entscheiden, welche Dateien für Sdist / bdist zu halten?