2013-02-13 3 views
30

Wie fügen Sie Python-Bibliotheken von Drittanbietern in Google App Engine hinzu, die nicht von Google bereitgestellt werden? Ich versuche BeautifulSoup in der Google App Engine zu verwenden und kann dies nicht tun. Aber meine Frage bezieht sich auf jede Bibliothek, die ich in Google App Engine verwenden möchte.Wie fügen Sie Python-Bibliotheken von Drittanbietern in Google App Engine ein?

+0

mögliches Duplikat von [Wie verwalte ich Python-Bibliotheken von Drittanbietern mit Google App Engine? (virtualenv? pip?)] (http://stackoverflow.com/questions/4863557/how-do-i-manage-third-party-python-libraries-with-google-app-engine-virtualenv) – Wernight

Antwort

43

Eigentlich denke ich this answer passt hier besser.

Wenn Sie Bibliotheken von Drittanbietern verwenden möchten, die nicht in this list enthalten sind, müssen Sie sie manuell hinzufügen.

Um manuell jede andere Bibliothek einzuschließen, müssen Sie sie in dem Verzeichnis haben, in dem die app.yaml lebt. Wenn Sie also zum Beispiel haben die folgende Struktur:

hello 
├── libs 
│ └── bs4 
├── hello.py 
└── app.yaml 

dann in Ihrem hello.py Sie müssen diese beiden Zeilen am Anfang der Datei setzen:

import sys 
sys.path.insert(0, 'libs') 

Nachdem ich, dass Sie in der Lage sein werden um eine 3rd-Party-Bibliothek zu verwenden, die Sie in das Verzeichnis libs stellen.

Zum Beispiel:

from bs4 import BeautifulSoup 
+0

kann es nicht funktioniert nach dem Verschieben in libs –

+0

Mein schlecht, endlich hat es funktioniert. Danke –

+0

Ich habe immer noch Probleme damit, nachdem ich den Anweisungen gefolgt habe. Hat sich etwas mit GAE geändert? –

0

Gerade BeautifulSoup in der Wurzel Ihres Projekts setzen und alles

+0

Kann ich setzen es in einem bestimmten Ordner wie - 'lib'? –

+1

ja manipulieren sys.path oder verwenden Sie Site-Modul wie in 'site.addsitedir ('lib') –

3

laden einfach kopieren Sie den Ordner mit der Bibliothek, die Sie verwenden möchten, um in Ihre App Engine-Projekt enthält.

Wenn Sie es dann bereitstellen, wird es mit Ihrer Anwendung hochgeladen und kann verwendet werden.

EDIT: Jesse's answer ist, wie ich das jetzt mache. Also mach das!

1

So wie es hier gearbeitet wird:

import sys 
# sys.path.insert(0, 'libs') #"Old" way, not working for me. 
sys.path.append(os.path.join(os.path.dirname(__file__), "libs")) # This works! 

Dann importieren normalerweise:

from bs4 import BeautifulSoup 
50

Google eine dokumentierte Möglichkeit für enthalten Dritter zur Verfügung gestellt hat Bibliotheken in Ihrem GAE-Projekt.

Siehe "Adding Third-party Packages to the Application" section of the Libraries in Python 2.7 docs.

Wenn Sie zusätzliche pure-python-Pakete von Drittanbietern hinzufügen möchten, können Sie dies tun, indem Sie vendoring einrichten. Mithilfe von Vendoring können Sie Pakete in einem Unterverzeichnis Ihres Projekts installieren und sie in Ihren Code aufnehmen. Um das Kreditoring zu verwenden, erstellen Sie (oder ändern Sie) appengine_config.py im Stammverzeichnis Ihres Projekts.

from google.appengine.ext import vendor 
# Add any libraries installed in the "lib" folder. 
vendor.add('lib') 

Und dann nur Ihre Libs setzen Code Quelle in Ihrem lib dir

> pip install beautifulsoup4 -t lib 

So Projektverzeichnisstruktur sieht wie folgt aus:

project 
- lib 
    - bs4 
- your_code.py 

Dies ermöglicht Ihre Quelldateien des Projekts, um die Pakete/Module der Bibliotheken so zu importieren, als wären sie zu Ihrer PYTHON_PATH hinzugefügt worden. Zum Beispiel:

# file: your_code.py 
import bs4 # no need for 'from lib import bs4' 
# do stuff with bs4... 

können Sie auch einfach alles aus einer requirements.txt Datei installieren, indem Sie den folgenden Befehl

tun
> pip install -t lib -r requirements.txt 
+2

Diese Antwort scheint besser zu sein als die, die akzeptiert wird. Danke Jesse! –

+2

dies funktionierte für mich für eine lange Zeit, aber begann gerade unerklärlich zu versagen. Ich bekomme jetzt 'virtualenv: kann nicht auf lib zugreifen: Nein solche virtualenv oder Site-Verzeichnis' – bgenchel

+0

Ich bekomme das gleiche jetzt. Seltsam. –

0

pip install -t lib package_name

lib: die Speicherort für Drittanbieter-Bibliotheken

Dann sind Sie gut zu Verwenden Sie dieses Paket wie eine normale Bibliothek, die Sie von ipython oder terminal verwenden.