在内部服务器上设置Django(os.environ()没有按预期工作?)

时间:2009-02-10 06:18:56

标签: python django apache

我正在尝试在内部公司服务器上设置Django。 (没有外部连接到Internet。)

查看服务器设置文档,似乎“Running Django on a shared-hosting provider with Apache”方法似乎最有可能在这种情况下工作。

这是服务器信息:

  • 无法安装mod_python
  • 无root访问
  • 服务器是SunOs 5.6
  • Python 2.5
  • Apache / 2.0.46
  • 我已经使用 - flup安装了Django(和prefix option)(我可能应该再次阅读 - 家庭,但目前似乎并不重要)

我已将.htaccess文件和mysite.fcgi文件添加到我的根网址目录here。 当我从服务器运行 mysite.fcgi 脚本时,我得到了我预期的输出(正确的站点HTML输出)。但是,尝试从浏览器访问它时不会。

由于我使用的是前缀选项,因此PYTHONPATH设置可能存在问题。

我注意到如果我从命令行运行mysite.fcgi而没有设置PYTHONPATH enviornment变量,则会抛出以下错误:

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(前缀路径) os.environ ['PYTHONPATH'] =前缀路径添加到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正在设置变量OK,但该变量仅适用于脚本内部。 Flup似乎是作为.egg文件分发的,我的猜测是,egg实现没有考虑os.environ['key'] = value(?)添加的变量,至少在通过--prefix选项进行安装时。 / p>

我对.pth文件并不熟悉,但似乎easy-install.pth文件是指向flup的文件:

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 个答案:

答案 0 :(得分:3)

在你的设置中,你必须指向实际的egg文件,而不是egg文件所在的目录。它应该看起来像:

sys.path.append('/path/to/flup/egg/flup-1.0.1-py2.5.egg')

答案 1 :(得分:2)

尝试使用名为virtualenv的实用程序。根据官方软件包页面,“virtualenv是一个创建孤立的Python环境的工具。”

它将为您处理PYTHONPATH内容,并且可以轻松正确安装Django和flup。

答案 2 :(得分:1)

使用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'

答案 3 :(得分:0)

要从python脚本修改PYTHONPATH,您应该使用:

sys.path.append("prefixpath")

尝试此操作而不是使用os.environ()进行修改。

我建议用mod_python运行Django而不是使用FastCGI ......