Skip to main content
 首页 » 编程设计

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

2025年05月04日26powertoolsteam

我正在尝试在公司内部服务器上安装 Django。 (没有外部互联网连接。)

查看服务器设置文档,“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) (再次阅读我可能应该使用 --home,但目前它似乎并不重要)

我已将 .htaccess 文件和 mysite.fcgi 文件添加到我的根 Web 目录中,如前所述 here . 当我从服务器运行 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,但如果我在命令行上将环境变量设置为空,然后运行 ​​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 选项安装时。

我对 .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) 

看起来它正在做一些时髦的事情,无论如何要编辑它或向我的代码中添加一些东西以便它会发现错误?

请您参考如下方法:

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

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