9


2

Google App Engine(Python)でsys.pathを変更するにはどうすればよいですか?

ハンドラースクリプト(main.py)に次の行を追加しようとしましたが、機能していないようです:

_ sys.path.append( 'subdir') _

`subdir`は、私のルートディレクトリ(つまり、 「app.yaml」を含むもの)。

「subdir」にあるモジュールをインポートしようとすると、アプリが爆発するため、これは機能していないようです。

2 Answer


19


1) subdir`に空の init 。py`ファイルがあることを確認してください。

{空} 2)完全なパスを使用します。このようなもの:

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))

'' '' '

編集:コメントで尋ねられた質問に答えるための詳細情報を提供します。

Nick Johnsonが示すようにこれらの3行のコードを fix_path.py`というファイルに配置できます。 次に、 `main.py`ファイルで、他のすべてのインポートの前にこの import fix_path`を実行します。 http://bitbucket.org/abernier/yab/src/dc1fbe541d17/ [この手法を使用したテスト済みアプリケーションへのリンク]。

そして、はい、 `init 。py`ファイルが必要です。 http://docs.python.org/tutorial/modules.html#packages [ドキュメント]に従って:

_ _ パッケージをインポートするとき、Pythonはsys.pathのディレクトリを検索してパッケージサブディレクトリを探します。

Pythonでディレクトリをパッケージを含むものとして扱うには、 init 。py`ファイルが必要です。これは、文字列などの共通名を持つディレクトリが、後でモジュール検索パスで発生する有効なモジュールを意図せずに隠さないようにするために行われます。 最も単純な場合、 ` init 。py`は単なる空のファイルになることができますが、パッケージの初期化コードを実行したり、後述する all`変数を設定することもできます。 _ _


2


sys.pathの最初のエントリとして新しいディレクトリを挿入するのに役立ちました。

path_changer.py:

import os
import sys

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps'))

app.py:

import path_changer
from google.appengine.ext.webapp.util import run_wsgi_app

from flask import Flask
import settings

app = Flask('myapp')
app.config.from_object('settings')

from website import views as website_views

run_wsgi_app(app)