Настройка Django на внутреннем сервере (os.environ () не работает должным образом?) - PullRequest
1 голос
/ 10 февраля 2009

Я пытаюсь настроить Django на внутреннем сервере компании. (Нет внешнего подключения к Интернету.)

При просмотре документации по настройке сервера выясняется, что метод " Запуск Django на провайдере общего хостинга с Apache ", скорее всего, сработает в этой ситуации.

Вот информация о сервере:

  • Не удается установить mod_python
  • без root-доступа
  • Сервер SunOs 5.6
  • Python 2.5
  • Apache / 2.0.46
  • Я установил Django (и flup ), используя опцию префикса - (читая еще раз, я, вероятно, должен был использовать --home, но на данный момент это не так) кажется не имеет значения)

Я добавил файл .htaccess и mysite.fcgi в мой корневой веб-каталог, как упоминалось здесь . Когда я запускаю сценарий mysite.fcgi с сервера, я получаю ожидаемый результат (правильный вывод HTML сайта). Но при попытке доступа к нему через браузер этого не произойдет.

Возможно, проблема в настройке PYTHONPATH, так как я использую опцию префикса.

Я заметил, что если я запускаю mysite.fcgi из командной строки без установки переменной окружения PYTHONPATH, выдается следующая ошибка:

prompt$ python2.5 mysite.fcgi 
 ERROR:
 No module named flup   Unable to load
 the flup package.  In order to run
 django   as a FastCGI application, you
 will need to get flup from  
 http://www.saddi.com/software/flup/  
 If you've already   installed flup,
 then make sure you have it in your
 PYTHONPATH.

Я добавил sys.path.append (prefixpath) и os.environ ['PYTHONPATH'] = prefixpath в mysite.fcgi, но если я установлю переменную enviornment чтобы быть пустым в командной строке, затем запустите mysite.fcgi, я все еще получаю вышеуказанную ошибку.

Вот некоторые результаты командной строки:

>>> os.environ['PYTHONPATH'] = 'Null'
>>>
>>> os.system('echo $PYTHONPATH')
Null
>>> os.environ['PYTHONPATH'] = '/prefix/path'
>>>
>>> os.system('echo $PYTHONPATH')
/prefix/path
>>> exit()
prompt$ echo $PYTHONPATH
Null

Похоже, что Python устанавливает переменную ОК, но переменная применима только внутри скрипта. Похоже, что Flup распространяется в виде файла .egg, и я предполагаю, что реализация egg не учитывает переменные, добавленные os.environ['key'] = value (?), По крайней мере, при установке через параметр --prefix.

Я не очень знаком с файлами .pth, но кажется, что файл easy-install.pth указывает на переменную:

import sys; sys.__plen = len(sys.path)
./setuptools-0.6c6-py2.5.egg
./flup-1.0.1-py2.5.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sy
s.path[p:p]=new; sys.__egginsert = p+len(new)

Похоже, что он делает что-то необычное, во всяком случае, чтобы отредактировать это или добавить что-то в мой код, чтобы он нашел ошибку?

Ответы [ 4 ]

3 голосов
/ 11 февраля 2009

В ваших настройках вы должны указать фактический файл яйца, а не каталог, где находится файл яйца Это должно выглядеть примерно так:

sys.path.append('/path/to/flup/egg/flup-1.0.1-py2.5.egg')
2 голосов
/ 10 февраля 2009

Попробуйте использовать утилиту с именем virtualenv . Согласно официальной странице пакета, «virtualenv - это инструмент для создания изолированных сред Python».

Он позаботится о вещах PYTHONPATH и облегчит правильную установку Django и flup.

1 голос
/ 20 сентября 2010

Используйте site.addsitedir (), а не os.environ ['PYTHONPATH'] или sys.path.append ().

site.addsitedir интерпретирует файлы .pth. Изменение os.environ или sys.path не позволяет. В любом случае, не в среде FastCGI.

#!/user/bin/python2.6

import site

# adds a directory to sys.path and processes its .pth files
site.addsitedir('/path/to/local/prefix/site-packages/')

# avoids permissions error writing to system egg-cache
os.environ['PYTHON_EGG_CACHE'] = '/path/to/local/prefix/egg-cache'
0 голосов
/ 10 февраля 2009

Чтобы изменить PYTHONPATH из скрипта Python, вы должны использовать:

sys.path.append("prefixpath")

Попробуйте вместо изменения с помощью os.environ ().

И я бы порекомендовал запустить Django с mod_python вместо использования FastCGI ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...