2016-07-17 6 views
0

私はGoogleのアプリケーションエンジンのアカウントで2つの異なるプロジェクトを持っています。私のパソコン内のフォルダ構造は以下の通りです:GAEプロジェクトの共通ファイルを定義する

  • parent_folder
    • common_folder
    • project1_folder
    • project2_folder

私は私が欲しいcommon_folderのいくつかのPythonのクラスを持っています両方のプロジェクト(project1とproject2)で使用できます。

私は次のように使用してみました

(アップロード時に多分GAEは、共通ファイルのコピーを作成することができますか?)Google App EngineのプロダクションENVにもそれらを認識しますので、私のプロジェクトに共通のクラスをインポートしたいです特定の親ディレクトリ・パスから私のクラスをインポートするためのコード:

import os 
PARENT_DIR = os.path.dirname(os.path.dirname(__file__)) 
print PARENT_DIR 
def load_src(name, fpath): 
    import os, imp 
    return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) 

load_src("globals", PARENT_DIR +"/common/globals.py") 
from globals import * 

このコードは私のローカルホスト環境からのみ働いていたが、私はGAEにアップロードするとき、それはクラスを認識しませんでした:

> File 
> "/base/data/home/apps/s~loan-management-system/1.394267205500555512/main.py", 
> line 39, in load_src 
>  return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) IOError: [Errno 2] No 
> such file or directory 

答えて

0

エラーが表示される理由は、モジュール/サービスディレクトリ(または単一モジュールアプリケーションのアプリケーションディレクトリ)の上に、展開中にGAEにアップロードされるものがないことです。

https://stackoverflow.com/a/34291789/4495081を参照して、アプリケーションディレクトリ内の必要なファイルをシンボリックリンクできます。デプロイメントユーティリティは、シンボリックリンクに従って、デプロイメントに共通フォルダパッケージを含めることを認識しています。

私はちょうどlibディレクトリ内の共通のコードのディレクトリをシンボリックリンクコードをインストール/各アプリケーション内のvendor it inその後、(__init__.pyファイルを追加)、共通のフォルダにパッケージを作る提案するが、代わりにコピーするでしょう。

from common_folder.class import MyClass 
+0

それは動作します:

次に、あなたのアプリであなただけの(MyClasscommon_folder/class.pyから来ているたとえば仮定して)、このようなクラスを使用すると思い、手動でパスをいじる必要はありません。ありがとう。私は 'models'という名前のフォルダを作成し、その中に空の__init__.pyファイルとすべての一般的なpythonファイルを作成しました。私は自分のプロジェクトにそのフォルダへのシンボリックリンクを作成しました。 –

関連する問題