私はコードを複数のファイルに分割しました。他のすべてのファイルのすべての関数をadmin.pyにインポートしました。関数XYZを呼びたいとします。私がadmin/XYZ
として機能するためのパスを与えると、それは私に無効な機能としてエラーを与え、これに対して私はfile_with_XYZ_function/XYZ
というパスを与えなければなりません。web2pyでimportを使用した関数呼び出し
1つのファイルから
私はコードを複数のファイルに分割しました。他のすべてのファイルのすべての関数をadmin.pyにインポートしました。関数XYZを呼びたいとします。私がadmin/XYZ
として機能するためのパスを与えると、それは私に無効な機能としてエラーを与え、これに対して私はfile_with_XYZ_function/XYZ
というパスを与えなければなりません。web2pyでimportを使用した関数呼び出し
1つのファイルから
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を再起動しない限り変更が表示されません。
web2py 1.96.1以降、local_importは推奨されていません。標準のPythonのimportステートメントを使用して/ app/modulesフォルダからモジュールをインポートできるようになりました。たとえば、/app/modules/mymodule.pyの場合、単に 'import mymodule'を実行します。 – Anthony
あなたはmodulesフォルダ内にpythonファイルを作成し、コントローラ内のpythonライブラリをどのようにインポートするかのようにインポートできます。しかし、それらのファイルへのパスを与える必要があります
from applications.myApp.modules.myModule import *
これは私のラッパーのための私のソリューションです。今すぐあなたの名前を呼び出すことによってあなたの機能を使用することができます
myFunction
返事をありがとう。ファイル内のどこかからその関数を呼び出さなければならないと言っていることは本当です。私がそれらをインポートしたファイルから同じ関数を直接使用したいのであれば、そのような関数は見つかりません(詳細は私の質問を参照してください)。 –
ファイル内のネイティブ関数のような関数を呼び出すことはできません。インポートした関数は実行時にインポートされるため、サーバーはそれらの関数に要求を送ることはできません。最後に、インポートされた関数を呼び出すダミー関数を内部に配置することができます。すべてが何か起こっている。 – kommradHomer
これはURLリライトを使用する場所です:) –
あなたはファイル名としてXYZを持っていますか? –
どのコードですか?あなたのコード? admin.py独自の関数ですか、またはgluon/admin.pyコアファイルを変更しましたか? yourapp/modulesの下のファイルadmin/XYZはどこにありますか?申し訳ありませんが、もっと情報が必要です。 web2pyメーリングリストで尋ねると、より良いサポートが得られます。 – Massimo
混乱して申し訳ありませんが、私は質問自体を編集しました。 admin.pyは自分のファイルで(コントローラー内で)、そのファイルにXYZという関数をインポートしました。私はadmin.pyで定義された関数を呼び出すのと同じ方法でその関数を呼び出すことはできません。 –