2011-07-02 12 views
1

私はコードを複数のファイルに分割しました。他のすべてのファイルのすべての関数をadmin.pyにインポートしました。関数XYZを呼びたいとします。私がadmin/XYZとして機能するためのパスを与えると、それは私に無効な機能としてエラーを与え、これに対して私はfile_with_XYZ_function/XYZというパスを与えなければなりません。web2pyでimportを使用した関数呼び出し

1つのファイルから

+0

あなたはファイル名としてXYZを持っていますか? –

+0

どのコードですか?あなたのコード? admin.py独自の関数ですか、またはgluon/admin.pyコアファイルを変更しましたか? yourapp/modulesの下のファイルadmin/XYZはどこにありますか?申し訳ありませんが、もっと情報が必要です。 web2pyメーリングリストで尋ねると、より良いサポートが得られます。 – Massimo

+0

混乱して申し訳ありませんが、私は質問自体を編集しました。 admin.pyは自分のファイルで(コントローラー内で)、そのファイルにXYZという関数をインポートしました。私はadmin.pyで定義された関数を呼び出すのと同じ方法でその関数を呼び出すことはできません。 –

答えて

2

NOTEをすべてのインポート機能をこの問題とシンプルなコールを克服する方法はあります:私はあなたの質問を理解していないので、これは、あなたの質問に答えるではないかもしれません...

しかし、あなたは(共有)モジュールにいくつかのコードを入れたいと私はあなたがweb2py bookの章4(コア)を見ているとlocal_importを検索することを示唆している、あなたのコントローラーのいくつかからそれを含める場合。このような状況のために

、web2pyの は、グローバルのsys.path が変更されていないような方法でモジュール インポートするための別の方法で提供しています。アプリケーションの 「モジュール」フォルダに置くことでは。 1つの利点は、モジュール が自動的にコピーされ、 がアプリケーションと共に配布されることです。 ただし、適用される特定の の制限があります。 web2py は モジュールを "modules"フォルダからインポートするために を使用する必要があるlocal_import関数を提供します。

モジュールのインポートは、モジュールとweb2pyがそれらを見つけることができる場所によって異なります。 web2pyがsys.pathまたはweb2py/site-packagesにある標準モジュールである場合、import modulenameは期待通りに動作するはずです。アプリのweb2pyにローカルモジュールについては

は何か他のものを提供しています:applications/appname/modules

これらのモジュールはlocal_importを使用してインポートすることができます。

mymodule = local_import(themodule)

これはアプリのローカルモジュールフォルダの名前themoduleでモジュールをインポートし、名前のmymoduleの下で使用できるようにします。 local_importは、reloadとappの2つの追加引数をサポートしています。開発モジュールのコードは頻繁に変更されるので、web2pyにパラメーターreload=Trueを指定してモジュールをリロードするよう忘れないようにしてください。そうしないと、web2pyを再起動しない限り変更が表示されません。

+1

web2py 1.96.1以降、local_importは推奨されていません。標準のPythonのimportステートメントを使用して/ app/modulesフォルダからモジュールをインポートできるようになりました。たとえば、/app/modules/mymodule.pyの場合、単に 'import mymodule'を実行します。 – Anthony

0

あなたはmodulesフォルダ内にpythonファイルを作成し、コントローラ内のpythonライブラリをどのようにインポートするかのようにインポートできます。しかし、それらのファイルへのパスを与える必要があります

 from applications.myApp.modules.myModule import *

これは私のラッパーのための私のソリューションです。今すぐあなたの名前を呼び出すことによってあなたの機能を使用することができます

myFunction
+0

返事をありがとう。ファイル内のどこかからその関数を呼び出さなければならないと言っていることは本当です。私がそれらをインポートしたファイルから同じ関数を直接使用したいのであれば、そのような関数は見つかりません(詳細は私の質問を参照してください)。 –

+0

ファイル内のネイティブ関数のような関数を呼び出すことはできません。インポートした関数は実行時にインポートされるため、サーバーはそれらの関数に要求を送ることはできません。最後に、インポートされた関数を呼び出すダミー関数を内部に配置することができます。すべてが何か起こっている。 – kommradHomer

+0

これはURLリライトを使用する場所です:) –

関連する問題