我正在尝试在内部公司服务器上设置Django。 (没有外部连接到Internet。)
查看服务器设置文档,似乎“Running Django on a shared-hosting provider with Apache”方法似乎最有可能在这种情况下工作。
这是服务器信息:
mod_python
我已将.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)
看起来它正在做一些时髦的事情,无论如何编辑它或在我的代码中添加一些东西以便它会发现痘痘?
答案 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 ......