Python 在内部服务器上设置Django(os.environ()未按预期工作?)
我正在尝试在公司内部服务器上安装Django。(没有与Internet的外部连接。) 查看服务器安装文档,似乎在这种情况下最有可能使用“”方法 以下是服务器信息:Python 在内部服务器上设置Django(os.environ()未按预期工作?),python,django,apache,Python,Django,Apache,我正在尝试在公司内部服务器上安装Django。(没有与Internet的外部连接。) 查看服务器安装文档,似乎在这种情况下最有可能使用“”方法 以下是服务器信息: 无法安装mod\u python 没有根访问权限 服务器是sunos5.6 Python 2.5 Apache/2.0.46 我已经安装了Django(并且)使用--(再次阅读我可能应该使用--home,但目前它似乎并不重要) 如前所述,我已将.htaccess文件和mysite.fcgi文件添加到我的根web目录中。 当我从服务
- 无法安装
mod\u python
- 没有根访问权限
- 服务器是sunos5.6
- Python 2.5
- Apache/2.0.46
- 我已经安装了Django(并且)使用--(再次阅读我可能应该使用--home,但目前它似乎并不重要)
.htaccess
文件和mysite.fcgi
文件添加到我的根web目录中。
当我从服务器上运行mysite.fcgi脚本时,我得到了预期的输出(正确的站点HTML输出)。但是,当试图从浏览器访问它时,它不会
似乎是PYTHONPATH设置有问题,因为我使用了prefix选项
我注意到,如果从命令行运行mysite.fcgi
,而不设置PYTHONPATH
environment变量,则会抛出以下错误:
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
,但是如果我在命令行上将environment变量设置为空,然后运行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文件的形式分发,我的猜测是,至少在通过--prefix
选项安装时,egg实现没有考虑由os.environ['key']=value
(?)添加的变量
我对.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)
看起来它正在做一些很时髦的事情,不管怎样,编辑这个或在我的代码中添加一些东西,这样它就会找到flup?尝试使用一个名为的实用程序。根据官方的软件包页面,“virtualenv是一种创建孤立Python环境的工具。”
它将为您提供
PYTHONPATH
功能,并使正确安装Django和flup变得容易。尝试使用名为的实用程序。根据官方的软件包页面,“virtualenv是一种创建孤立Python环境的工具。”
它将为您处理
PYTHONPATH
内容,并使正确安装Django和flup变得容易。要从python脚本修改PYTHONPATH,您应该使用:
sys.path.append("prefixpath")
尝试此操作,而不是使用os.environ()进行修改
我建议使用mod_python运行Django,而不是使用FastCGI…从您应该使用的python脚本修改PYTHONPATH:
sys.path.append("prefixpath")
尝试此操作,而不是使用os.environ()进行修改
我建议使用mod_python运行Django,而不是使用FastCGI…在您的设置中,您必须指向实际的egg文件,而不是egg文件所在的目录。它应该看起来像:
sys.path.append('/path/to/flup/egg/flup-1.0.1-py2.5.egg')
在您的设置中,您必须指向实际的egg文件,而不是egg文件所在的目录。它应该看起来像:
sys.path.append('/path/to/flup/egg/flup-1.0.1-py2.5.egg')
使用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'
使用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'
我还添加了sys.path.append(“prefixpath”),但是如果不在命令行上添加ENV选项,我仍然会得到flup PYTHONPATH错误。不幸的是,我没有安装mod_python所需的权限:我还在添加sys.path.append(“prefixpath”),但如果不在命令行上添加ENV选项,我仍然会遇到flup PYTHONPATH错误。不幸的是,我没有安装mod_python:P所需的权限