2012-03-29 10 views
3

Die neueste python2.7 hat ein google Verzeichnis innerhalb dist-packages, was es unmöglich macht, das google Verzeichnis zu importieren, die appengine und andere Pakete von einem anderen Standort enthält. Ein solches Verzeichnis muss verwendet werden, um Importe von GoogleAppEngine (GAE) -Code auf dem dev_server zu bewirken. Andernfalls schlagen solche Importe fehl. Ein Beispiel für einen solchen Import ist:GoogleAppEngine und aktuelle python2.7: Lage von „google“ Verzeichnis

from google.appengine.api import mail

, die in here das ähnlich

ImportError: No module named appengine.api

Dieses Problem ergibt und in der Tat folgende Alex Martelli reply die Lage meiner google Import ist

In [1]: import google 
In [2]: google.__file__ 
Out[2]: '/usr/lib/python2.7/dist-packages/google/__init__.pyc' 

eher tha In dem, wo ich die GAE Dateien entpackt habe.

Jeder empfohlene Weg, um dieses Problem beheben? Ich dachte schon über unsaubere dies zu beheben, wie Soft-Links in dem dist-Paketen Google Verzeichnis setzen, aber wieder, das ist schmutzig.

Antwort

3

Pakete haben eine besondere Eigenschaft, __path__, die den Python-Interpreter sagt, wo für Module und Subpackages zu suchen. Wenn Sie dies ändern, können Sie Python Inhalte aus beiden Verzeichnissen google finden lassen. Unter Verwendung des pkgutil Modul, dies sollte (ungetestet) arbeiten:

import pkgutil 
import google 
google.__path__ = pkgutil.extend_path(google.__path__, google.__name__) 
+0

Vielen Dank für Ihre Antwort. Ich habe Ihren Code in die Datei "__init __. Py" in meinem 'google'-Verzeichnis unter' dist-packages' gesetzt, aber derselbe Importfehler ist weiterhin aufgetreten. Mache ich es falsch? Wenn es funktioniert, ist es eine sehr gute Möglichkeit, dieses Problem zu überwinden. –

+0

@JosvicZammit Wie ich es geschrieben habe, sollten Sie das aus Ihrem eigenen Code ausführen, bevor Sie etwas aus 'google.appengine' importieren. In welches 'google'-Verzeichnis hast du es eingefügt? –

+0

Ich habe es in das 'google' -Verzeichnis unter' dist-packages' vergebens eingefügt, und auch den Code in meinem eigenen Code vor dem Import ausprobiert, wie du vorgeschlagen hast, aber wieder nicht funktioniert. –

0

Sind Sie sicher, dass das Google-Verzeichnis kam mit Python 2.7? Ich habe es auch gesehen, aber es erschien zum ersten Mal, als ich ein Dienstprogramm von Google installierte (ich denke, es war Google Storage for Developers). Ich denke auch, dass es eine .pth-Datei dazu gibt.

+0

In der Tat, ich denke, es ist mit einem Dienstprogramm von Google nicht zu Python2.7 verwandt. Allerdings habe ich gestern einige Updates auf Ubuntu 11.10 installiert und das Problem trat nach dem Neustart auf. FYI das 'google' Verzeichnis unter' dist-packages', zusätzlich zu '__init __. Py', enthält nur das folgende Verzeichnis: ' 2012-01-15 18:18 protobuf' –

+0

Suchen Sie nach .pth Dateien in dist-packages oder Site-Pakete. –

+0

Ich listet alle .pth-Dateien unter dist-packages auf: '/usr/lib/python2.7/dist-packages$ finden. -name '* .pth' ./wx.pth ./ubuntuone-storage-protocol.pth ./zope.interface-3.6.1-nspkg.pth ./pygtk.pth ./lazr.restfulclient- 0.11.2-nspkg.pth ./ubuntuone-client.pth ./setuptools.pth ./ubuntuone-couch.pth ./ubuntuone-installer.pth ./pygst.pth ./lazr.uri- 1.0.2-nspkg.pth ./python-support.pth ./ubuntu-sso-client.pth ./ubuntuone-control-panel.pth ./PIL.pth ./gtk-2.0-pysupport- compat.pth' –

Verwandte Themen