3

WEb2Py はかなりいいので使いたいです。作業ディレクトリを、すべてのモジュール/ライブラリ/アプリがあるディレクトリに変更して、それらを使用できるようにするだけです。web2py インターフェイス/アプリケーションを使用するときに、実際のプログラムをインポートできるようにしたいと考えています。すべてのアプリやものを Web2Py フォルダー内に配置する代わりに、これを行う必要があります...プログラムを Web2Py フォルダーに配置せずに、プログラムに Web フロントエンドを提供しようとしています..これが理解しにくい場合は申し訳ありません。

4

3 に答える 3

5

マルチスレッドの Python プログラム (Python だけでなく) では、os.chdir を使用しないでください。複数のスレッドを実行している場合は、sys.path を変更しないでください。他のスレッドに影響を与えるため、安全ではありません。さらに、爆発する可能性があるため、ループ内で sys.path.append() を使用しないでください。

すべての Web フレームワークはマルチスレッドであり、リクエストはループで実行されます。一部の Web フレームワークでは、Web サーバーを再起動せずにアプリケーションをインストール/アンインストールできないため、os.chdir/sys.path.append が起動時にのみ実行される場合は問題ありません。

web2py では、Web サーバーを再起動せずにアプリケーションをインストール/アンインストールできるようにしたいと考えています。私たちはアプリを非常に動的なものにしたいと考えています (たとえば、http リクエストで提供される情報に基づいてモデルを定義するなど)。各アプリに独自のモデル フォルダーを用意し、アプリを完全に分離して、2 つのアプリが同じモジュールの異なるバージョンを使用する必要がある場合に競合しないようにするため、そのための API を提供します (request.folder 、local_import)。

通常の os.chdir と sys.path.append を引き続き使用できますが、スレッドの外で行う必要があります (これは web2py 固有の問題ではありません)。import は、他の Python プログラムと同じように、好きな場所で使用できます。

この議論を web2py メーリング リストに移動することを強くお勧めします。

于 2010-01-01T00:23:12.180 に答える
0

os.chdirを使用すると、OSの作業ディレクトリを変更できますが、目的(奇妙な場所に存在するように制限されている一連のモジュール&cのインポートを有効にする)では、代わりに必要なディレクトリをsys.pathに追加する方がよいようです。

于 2009-12-30T03:09:36.840 に答える
0

私はまさにこれをしなければなりませんでした。コントローラーから使用したいモジュールがいくつかあります。コントローラーの modules ディレクトリにあるコードを使用できるようにしたい場合は、次を使用できます。

# 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

ジェイ

于 2010-01-26T02:40:40.367 に答える