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

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目录中。 当我从服务

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

查看服务器安装文档,似乎在这种情况下最有可能使用“”方法

以下是服务器信息:

  • 无法安装
    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所需的权限