проблемы mod_wsgi / python sys.path.exend - PullRequest
1 голос
/ 19 апреля 2009

Я работаю над сценарием mod_wsgi .. в начале:

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

Но я заметил, что каждый раз, когда я обновляю скрипт, var 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 ... есть ли способ убедиться, что этого не произойдет? Я хочу, чтобы путь к модулю загружался только один раз.

Ответы [ 3 ]

7 голосов
/ 19 апреля 2009

Не нужно беспокоиться о проверке или использовании abspath самостоятельно. Используйте встроенную функцию добавленного модуля * site '. Он позаботится об этих и других проблемах (например, pth-файлах) автоматически:

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

(Эта функция документирована только в Python 2.6, но она почти всегда существовала.)

3 голосов
/ 19 апреля 2009

Один довольно простой способ сделать это - проверить, был ли путь уже расширен, прежде чем расширять его: *

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

2 голосов
/ 20 апреля 2009

Документация mod_wsgi по перезагрузке кода охватывает это.

...