Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用mod_wsgi启动金字塔应用程序时,没有名为deploy的模块_Python_Apache_Mod Wsgi_Pyramid_Paster - Fatal编程技术网

Python 尝试使用mod_wsgi启动金字塔应用程序时,没有名为deploy的模块

Python 尝试使用mod_wsgi启动金字塔应用程序时,没有名为deploy的模块,python,apache,mod-wsgi,pyramid,paster,Python,Apache,Mod Wsgi,Pyramid,Paster,我第一次尝试在我的金字塔应用程序中使用mod_wsgi,但是当我尝试访问该站点时,我一直得到一个名为deploy的ImportError:No模块 在my/etc/apache2/sites available/domain.com <VirtualHost *:80> ServerName domain.com ServerAlias www.domain.com ServerAdmin admin@domain.com DocumentRoot

我第一次尝试在我的金字塔应用程序中使用mod_wsgi,但是当我尝试访问该站点时,我一直得到一个名为deploy的
ImportError:No模块

在my
/etc/apache2/sites available/domain.com

<VirtualHost *:80>  
    ServerName domain.com
    ServerAlias www.domain.com
    ServerAdmin admin@domain.com
    DocumentRoot /data/app
    ErrorLog /data/app/apache_error.log

    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    WSGIDaemonProcess pyramid user=www-data group=www-data \
        processes=2 threads=4 \
        python-path=/data/app/lib/python2.6/site-packages/
    WSGIScriptAlias / /data/app/pyramid.wsgi

    <Directory /data/app>
        WSGIProcessGroup pyramid
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
当我尝试在浏览器中访问
domain.com
时,我得到了
服务器遇到内部错误或配置错误,无法完成您的请求
错误。这是我的错误日志打印件

[Mon Apr 22 20:43:13 2013] [error] test
[Mon Apr 22 20:43:13 2013] [error] mod_wsgi (pid=6795): Target WSGI script '/data/app/pyramid.wsgi' cannot be loaded as Python module.
[Mon Apr 22 20:43:13 2013] [error] mod_wsgi (pid=6795): Exception occurred processing WSGI script '/data/app/pyramid.wsgi'.
[Mon Apr 22 20:43:13 2013] [error] Traceback (most recent call last):
[Mon Apr 22 20:43:13 2013] [error]   File "/data/app/pyramid.wsgi", line 30, in <module>
[Mon Apr 22 20:43:13 2013] [error]     from pyramid.paster import get_app, setup_logging
[Mon Apr 22 20:43:13 2013] [error]   File "/data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.py", line 3, in <module>
[Mon Apr 22 20:43:13 2013] [error]     from paste.deploy import (
[Mon Apr 22 20:43:13 2013] [error] ImportError: No module named deploy
应用程序已成功启动,控制台日志如下

test
Starting subprocess with file monitor
test
Starting server in PID 9132.
serving on http://0.0.0.0:6543
我还尝试直接进入python来导入paster.py,也没有问题

$ cd /data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/
$ /data/app/bin/python
Python 2.6.5 (r265:79063, Oct  1 2012, 22:04:36)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyramid.paster as p
test
>>> print p.__file__
/data/app/lib/python2.6/site-packages/pyramid-1.4-py2.6.egg/pyramid/paster.pyc
>>>
权限也应该可以

$ ls /data/app -l
-rw-rw-r-- 1 root www-data 4148 2013-04-22 21:06 apache_error.log
drwxrwsr-x 4 root www-data 4096 2013-04-22 12:05 app
drwxrwsr-x 2 root www-data 4096 2013-04-22 12:04 bin
drwxrwsr-x 2 root www-data 4096 2013-04-22 11:58 include
drwxrwsr-x 3 root www-data 4096 2013-04-22 11:58 lib
-rwxrwxr-x 1 root www-data  893 2013-04-22 12:23 pyramid.wsgi
drwxrwsr-x 2 root www-data 4096 2013-04-22 12:07 python-eggs
我错过了什么?谢谢

编辑
www-data
也是正确的用户

$ ps aux | grep apache2
root      2599  0.0  1.4 185200 14552 ?        Ss   10:00   0:02 /usr/sbin/apache2 -k start
www-data  9064  0.0  0.8 185664  8940 ?        Sl   21:06   0:00 /usr/sbin/apache2 -k start
www-data  9065  0.0  0.8 185664  8940 ?        Sl   21:06   0:00 /usr/sbin/apache2 -k start
www-data  9095  0.0  1.1 187292 11388 ?        S    21:06   0:00 /usr/sbin/apache2 -k start
www-data  9096  0.0  1.1 187292 11388 ?        S    21:06   0:00 /usr/sbin/apache2 -k start
www-data  9097  0.0  1.0 186768 10472 ?        S    21:06   0:00 /usr/sbin/apache2 -k start
www-data  9098  0.0  1.0 186768 10472 ?        S    21:06   0:00 /usr/sbin/apache2 -k start
www-data  9099  0.0  1.0 186768 10472 ?        S    21:06   0:00 /usr/sbin/apache2 -k start
root      9189  0.0  0.0   7624   912 pts/0    S+   21:42   0:00 grep apache2
编辑根据格雷厄姆的建议,我将
paste.py
中的
print'test'
替换为

import paste as p
print p.__path__

通过apache访问站点时的打印输出是
/usr/local/lib/python2.6/dist-packages/paste
,而不是virtualenv。我已经添加了所有我可以在线查看的示例,以指向
pyramid.wsgi
中的virtualenv以及apache配置文件中的
pythonpath
,但显然我仍然没有正确理解。我还可以在哪里尝试?

该错误将指示未安装PasteDeploy软件包


    • 终于解决了。从控制台日志中可以明显看出,我在
      /usr/local/lib
      中的主要python安装有一个未定义
      deploy
      处理程序的
      paste
      模块

      RedBaron关于设置
      WSGIPythonHome
      的评论起了作用,但问题是我有多个应用程序,所以我不能将
      WSGIPythonHome
      全局指向特定应用程序的virtualenv

      无论如何,我再次浏览了virtualenv()上的
      mod_wsgi
      docs,发现
      WSGIPythonHome
      应该指向一个“原始环境”。字面上

      $ virtualenv --no-site-packages BASELINE
      
      然后指向WSGIPythonHome

      WSGIPythonHome /usr/local/pythonenv/BASELINE
      
      并将
      WSGIDaemonProcess
      指向我的应用程序的特定virtualenv(我在开始时已经这样做了)

      吸取的教训:更多地关注文档


      最后,我的
      pyramid.wsgi
      可以大大简化为以下内容

      import os
      os.environ['PYTHON_EGG_CACHE'] = '/data/app/python-eggs'
      
      from pyramid.paster import get_app, setup_logging
      ini_path = '/data/app/app/development.ini'
      setup_logging(ini_path)
      application = get_app(ini_path, 'main')
      

      在我的例子中,在虚拟环境中重新安装PasteDeploy修复了问题,但不确定原因。

      感谢您的回复。如果是这样,那如何解释为什么从加载相同脚本的
      pserve
      开始是成功的呢?尽管如此,我还是尝试了
      $bin/pip安装pastedploy
      ,并且得到了已经满足的
      要求(使用--升级升级):pastedeploy in./lib/python2.6/site-packages/pastedeploy-1.5.0-py2.6.egg Cleaning up…
      编写一个hello world WSGI程序,导入“粘贴”并打印“粘贴文件”。这是从你期望的地方来的吗?再次感谢!我将我的
      打印测试
      替换为
      导入粘贴为p print p.\uu路径
      。我不知道为什么这么简单的支票逃过了我的眼睛。。。但是事实上apache没有得到正确的粘贴,打印出来的是
      '/usr/local/lib/python2.6/dist-packages/paste'
      我已经添加了所有的例子来指向我在
      pyramid.wsgi
      中的virtualenv以及apache配置文件中的
      pythonpath
      。。。我哪里做错了?尝试将以下内容添加到您的
      httpd.conf
      或您定义的
      的conf中(但在
      VirtualHost
      之外执行)
      WSGIPythonHome/path/to/virtualenv
      WSGIPythonPath/path/to/virtualenv/lib/python2.6
      @RedBaron:thx!它成功了,但是还有一个更根本的问题。如果我有多个应用程序(即多个virtualenv,这就是首先设置虚拟主机的全部意义),该怎么办?我无法多次定义
      WSGIPythonHome
      WSGIPythonPath
      对吗?很乐意帮助。。。。。当我从一个虚拟环境迁移到另一个虚拟环境时,我自己也有类似的问题。
      WSGIPythonHome /usr/local/pythonenv/BASELINE
      
      import os
      os.environ['PYTHON_EGG_CACHE'] = '/data/app/python-eggs'
      
      from pyramid.paster import get_app, setup_logging
      ini_path = '/data/app/app/development.ini'
      setup_logging(ini_path)
      application = get_app(ini_path, 'main')