Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mod_wsgi/python sys.path.exend问题_Python_Apache_Mod Wsgi - Fatal编程技术网

mod_wsgi/python sys.path.exend问题

mod_wsgi/python sys.path.exend问题,python,apache,mod-wsgi,Python,Apache,Mod Wsgi,我正在编写一个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'

我正在编写一个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时,它都会重置。。有没有办法确保这不会发生?我希望模块路径只加载一次

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

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
文件放入
站点包
目录中:


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

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
文件放入
站点包
目录中:


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

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

(此函数仅在Python 2.6中有文档记录,但它几乎一直存在。)

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

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

(该函数仅在Python 2.6中有文档记录,但它几乎一直存在。)

mod_wsgi涵盖了这一点。

mod_wsgi涵盖了这一点。

+1.pth文件非常棒。ApacheConfig中设置的环境变量也是如此。+1.pth文件非常棒。apache配置中设置的环境变量也是如此。