1

我正在研究一个 mod_wsgi 脚本。一开始是:

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

但我注意到,每次我更新脚本时,sys.path var 都会随着这个扩展的重复而不断增长:

['/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时它都会重置..有没有办法确保这不会发生?我希望模块路径只加载一次..

4

3 回答 3

7

无需担心自己检查或使用 abspath。使用“站点”模块的内置addsitedir功能。它将自动处理这些问题和其他问题(例如 pth 文件):

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

(这个函数只记录在 Python 2.6 中,但它几乎一直存在。)

于 2009-04-19T02:15:56.093 回答
3

一种相当简单的方法是在扩展之前检查路径是否已经扩展::

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 回答