2012-02-12 18 views
3

Google App Engineのいずれかのアプリでthis codeを使用しています。個々のファイルを参照する方法に問題が発生しました。同じモジュール内のファイルを参照する正しい方法

import reddit.decorators 
import reddit.errors 
import reddit.helpers 
import reddit.objects 

ファイルはすべて同じモジュール内で、彼らはこのinsteadのようにインポートするべきではありませんされているので:たとえば、次のように__init.py__にファイルがインポートされるなど、errors.py、decorators.py

import decorators 
import errors 
import helpers 
import objects 

絶対参照は、redditパッケージが何らかの理由でGoogle App Engineのように見えないシステムパス上にある場合にのみ機能します。

これはソースに問題があるのですか、Google App Engineのアプリケーション設定をより詳しく調べる必要がありますか?

答えて

0

パッケージを使用する場合は、Pythonが見つけ出す場所、つまりsys.pathにあるディレクトリ全体にディレクトリ全体をインストールする必要があります。パッケージの内容をスタンドアローンのモジュールとして使用しようとしないでください。これは、パッケージの設計方法ではないためです。

メインスクリプト(.)の作業ディレクトリがsys.pathであるため、パッケージ全体のディレクトリをメインスクリプトと同じディレクトリに入れるだけでredditパッケージを使用することができます。 Google App Engineでimport redditが見つからない場合は、そこの設定を確認する必要があります。残念ながら、私はGAEの仕組みやあなたがそこにインストールすることが許可されているか分かりませんが、Webspaceに任意のPythonモジュールやパッケージを置くことができるので、うまくいくはずです。

オリジナルの質問については、マニュアルの間違ったセクションを参照しています。

import reddit.decorators as decorators 

または相対的なもの:

from . import decorators 

絶対インポートの構文は、あなたのPythonのバージョンに依存して動作する場合intra-package referencesについて、あなたは絶対的な輸入品を使用する必要がありますどちらか。これはあいまいです。

import decorators 

グローバルモジュール(/decorators.py)を意味しますか?またはパッケージ内のモジュール(/reddit/decorators.py)? Python 2.xは相対インポートを最初に探し、相対的なものが失敗した場合は絶対インポートを試みます。バージョン2.6以降、絶対形式のインポートを使用することは推奨されておらず、今後は使用しないでください。 3.0以降、上記のステートメントは絶対インポートとしてのみ解釈され、相対ステートメントは検索されません。明示的な絶対インポートは、両方のバージョンで期待通りに機能します。

関連する問題