2014-02-22 6 views
5

Versuchte die Bereitstellung eines Django-Projekts in einer neuen App auf Heroku (Der Code läuft seit zwei Jahren auf anderen Instanzen) - und wurde damit getroffen :Fresh deploy auf Heroku schlägt fehl mit "use --allow-unified PIL zu erlauben"

Downloading/unpacking PIL==1.1.7 (from -r requirements.txt (line 7)) 

    Could not find any downloads that satisfy the requirement PIL==1.1.7 (from -r requirements.txt (line 7)) 

    Some insecure and unverifiable files were ignored (use --allow-unverified PIL to allow). 
    Cleaning up... 

    No distributions at all found for PIL==1.1.7 (from -r requirements.txt (line 7)) 
    Storing debug log for failure in /app/.pip/pip.log 

    !  Push rejected, failed to compile Python app 

ich bin mir dessen bewusst die jüngsten Veränderungen in pip und möchten Pakete verwenden, die sicher sind, aber bis alle ordnungsgemäß verpackt wie pro Pip Erwartungen zur Verfügung stehen, müssen wir einige Abhilfen. Vor allem das Fehlen der "allow-all-unified" -Flagge macht dies zu einem Trial-and-Error-Verfahren mit einer Blackbox-Übung statt einer schmerzlosen Bereitstellung.

Gibt es einen vernünftigen Weg, um diese Straßensperre zu überwinden? (Nicht nur PIL, aber das ist das erste Paket, das fehlgeschlagen ist, gibt es einige andere wie pyPdf, das scheitert, wenn ich es gerade beheben kann)

Alle Hinweise geschätzt!

Antwort

20

Ich fragte den Betreuer von Pip, und er antwortete mit einer einfachen Lösung. Ich erläutere, wie ich als Antwort auf meine eigene Frage vorgehen kann. Hier ist, was Sie jetzt tun müssen - bis die Pakete intern gehostet und verifiziert werden.

auf dem lokalen Rechner, erstellen Sie eine neue virtuelle Umgebung und fügen Sie eine Zeile auf die requirements.txt Datei:

--allow-all-external

speichern und ausführen:

pip install -r requirements.txt --download="~/temp/packages"

Was dieser Wille Nehmen Sie einfach jeden Paketnamen von requirements.txt und laden Sie das Paket in ~/temp/packages Verzeichnis und verifizieren Sie es.

Für jedes Paket, das Überprüfung fehlschlägt, fügen Sie eine weitere Zeile zu requirements.txt, gerade unterhalb der ersten Zeile alle externen Pakete erlaubt, geht das wie folgt aus:

--allow-unverified package-name

Vielleicht möchten Sie den Maintainer ping dieses Problem zu beheben ;)

Fahren Sie fort, bis pip erfolgreich abgeschlossen ist, und übergeben Sie dann die aktualisierte Version requirements.txt an vcs und deploy.

Das sollte alles sein.

+1

Ist es nur ich oder ist das ein zeitaufwendiger und schmerzhafter Prozess? Wenn Sie sich andere Werkzeuge wie npm oder Bundler anschauen, geben sie keinen Mist darüber, nicht verifiziert zu werden ... wie auch immer, einfach nur ... –

+2

Für andere Leute wie mich: Stellen Sie sicher, dass Sie auch eine ausreichend aktuelle Version von pip verwenden .... oder Sie können dies versuchen und scheitern. Mir wurde speziell gesagt, dass es nicht einige Versionspec finden konnte, wenn ich das tat. Das Upgrade von Pip selbst hat mich überholt. – wilbbe01

Verwandte Themen