我正在尝试在公司内部服务器上安装 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')
关于python - 在内部服务器上设置 Django(os.environ() 没有按预期工作?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/531224/