質問
Web2pyは非常に優れているので、Web2pyを使用したいのです。作業ディレクトリをすべてのモジュール/ライブラリ/アプリがあるディレクトリに変更するだけで、使用できるようにする必要があります。 Web2pyインターフェイス/アプリケーションを使用するときに、実際のプログラムをインポートできるようになりたいです。すべてのアプリやものをWeb2pyフォルダー内に配置する代わりに、これを行う必要があります...プログラムをWeb2pyフォルダーに入れずにプログラムにWebフロントエンドを提供しようとしています。これが理解しにくい場合は申し訳ありません。
他のヒント
マルチスレッドPythonプログラム(Pythonだけでなく)では、OS.Chdirを使用しないでください。複数のスレッドを実行している場合は、Sys.Pathを変更しないでください。他のスレッドに影響を与えるため、安全ではありません。さらに、爆発する可能性があるため、ループでsys.path.append()をsys.path.append()はしないでください。
すべてのWebフレームワークはマルチスレッドされており、リクエストはループで実行されます。一部のWebフレームワークでは、Webサーバーを再起動せずにアプリケーションをインストール/アンインストールすることはできません。したがって、os.chdir/sys.path.appendが起動時にのみ実行される場合、問題はありません。
Web2pyでは、Webサーバーを再起動せずにアプリケーションをインストール/アンインストールできるようにする必要があります。アプリを非常に動的にしたい(たとえば、HTTPリクエストで提供された情報に基づいてモデルを定義します)。各アプリに独自のモデルフォルダーが必要になり、2つのアプリが同じモジュールの異なるバージョンを必要とする場合、それらが互いに競合しないようにするため、アプリ間の完全な分離を望みます。 、local_import)。
通常のos.chdirとsys.path.appendを使用することもできますが、スレッド外でそれを行う必要があります(これはWeb2py特定の問題ではありません)。他のPythonプログラムのように、好きな場所にインポートを使用できます。
このディスカッションをWeb2pyメーリングリストに移動することを強くお勧めします。
私はこれをやらなければなりませんでした。コントローラーから使用したいモジュールはほとんどありません。コントローラーのモジュールディレクトリにあるコードを使用できるようにする場合は、以下を使用できます。
# use this in your controller code
impname = local_import('module_in_modules', reload=True)
# reload true will ensure that it will re load whenever
# there are changes to the module
ジェイ