我正在开发一个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都会重置..是否有任何方法可以确保不会发生这种情况?我希望模块路径只加载一次..
答案 0 :(得分:7)
无需担心自己检查或使用abspath。使用'site'模块的内置addsitedir功能。它会自动处理这些问题和其他问题(例如pth文件):
import site
site.addsitedir('/media/server/www/webroot/')
(此功能仅在Python 2.6中记录,但它几乎总是存在。)
答案 1 :(得分: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
目录:
答案 2 :(得分:2)
mod_wsgi documentation on code reloading涵盖了这一点。