1

私はmod_wsgiスクリプトに取り組んでいます。最初は次のとおりです。

sys.path.extend(map(os.path.abspath, ['/media/server/www/webroot/']))

しかし、スクリプトを更新するたびに、sys.path変数がこの拡張機能の複製で成長し続けることに気づきました。

['/usr/lib64/python25.zip'
'/usr/lib64/python2.5'
'/usr/lib64/python2.5/plat-linux2'
'/usr/lib64/python2.5/lib-tk'
'/usr/lib64/python2.5/lib-dynload'
'/usr/lib64/python2.5/site-packages'
'/usr/lib64/python2.5/site-packages/Numeric'
'/usr/lib64/python2.5/site-packages/gtk-2.0'
'/usr/lib64/python2.5/site-packages/scim-0.1'
'/usr/lib/python2.5/site-packages'
'/media/server/www/webroot'
'/media/server/www/webroot'
'/media/server/www/webroot'
'/media/server/www/webroot']

apacheを再起動するたびにリセットされます。これが発生しないようにする方法はありますか?モジュールパスを1回だけロードしたい。

4

3 に答える 3

7

自分で abspath をチェックしたり使用したりすることを心配する必要はありません。'site' モジュールの組み込みのaddsitedir関数を使用します。これらの問題やその他の問題 (pth ファイルなど) は自動的に処理されます。

import site
site.addsitedir('/media/server/www/webroot/')

(この関数は Python 2.6 でのみ文書化されていますが、ほとんど常に存在していました。)

于 2009-04-19T02:15:56.093 に答える
3

これを行う非常に簡単な方法の 1 つは、パスを拡張する前に、パスが既に拡張されているかどうかを確認することです::

path_extension = map(os.path.abspath,['/media/server/www/webroot/']) 
if path_extension[0] not in sys.path:
    sys.path.extend(path_extension)

sys.pathただし、これには、拡張されているかどうかを確認するために常にほとんどをスキャンするという欠点があります。より高速ですが、より複雑なバージョンを以下に示します::

path_extension = map(os.path.abspath,['/media/server/www/webroot/']) 
if path_extension[-1] not in reversed(sys.path):
    sys.path.extend(path_extension)

ただし、おそらくより良い解決策は、PYTHONPATH環境変数にパス拡張子を追加するか、ディレクトリに.pthファイルを配置することです。site-packages

http://docs.python.org/install/index.html

于 2009-04-18T20:33:16.243 に答える
2

コードのリロードに関する mod_wsgi のドキュメントでは、これについて説明しています。

于 2009-04-20T02:51:33.127 に答える