【问题标题】:apache2 - runs python 2.6, instead of 2.7apache2 - 运行 python 2.6,而不是 2.7
【发布时间】:2015-01-18 10:48:54
【问题描述】:

我正在尝试为 Odoo 设置 apache2 网络服务器。我得到的唯一问题是它没有运行正确版本的python。我使用的是 squeez linux 发行版,所以默认版本是 2.6。但我需要2.7。所以我单独安装了它,我可以使用 virtualenv 来运行它(在我使用这种方法设置 Odoo 服务器之前)。现在我需要做同样的事情,而且还需要引入apache2。但由于某种原因,它总是运行 python 2.6 并且 Odoo (v8) 无法启动,因为它需要 python 2.7。

所以当我启动 apache2 并尝试打开服务器地址时,我得到了这个错误:

mod_wsgi (pid=32341): Target WSGI script '/opt/odoo/openerp-wsgi.py' cannot be loaded as Python module.
 mod_wsgi (pid=32341): Exception occurred processing WSGI script '/opt/odoo/openerp-wsgi.py'.
 Traceback (most recent call last):
   File "/opt/odoo/openerp-wsgi.py", line 22, in <module>
     import openerp
   File "/opt/odoo/odoo/openerp/__init__.py", line 72, in <module>
     import modules
   File "/opt/odoo/odoo/openerp/modules/__init__.py", line 27, in <module>
     from . import db, graph, loading, migration, module, registry
   File "/opt/odoo/odoo/openerp/modules/graph.py", line 32, in <module>
     import openerp.osv as osv
   File "/opt/odoo/odoo/openerp/osv/__init__.py", line 22, in <module>
     import osv
   File "/opt/odoo/odoo/openerp/osv/osv.py", line 23, in <module>
     from .orm import Model, TransientModel, AbstractModel
   File "/opt/odoo/odoo/openerp/osv/orm.py", line 5, in <module>
     from ..models import (
   File "/opt/odoo/odoo/openerp/models.py", line 2083
      groupby_dict = {gb['groupby']: gb for gb in annotated_groupbys}

此错误清楚地表明正在运行 python 2.6 版本(在 2.7 中引入了字典推导)。我尝试过的任何事情,如果得到相同的结果,我要么得到不同的错误,要么 apache 仍然运行 2.6 版。

我的配置:

网站配置:

<VirtualHost *:80>
    ServerName some.eu
    ServerAlias *.some.eu
    WSGIDaemonProcess oe user=user group=some_group processes=2 python-path=/opt/odoo/odoo/ display-name=apache-odoo
    WSGIScriptAlias / /opt/odoo/openerp-wsgi.py
    WSGIProcessGroup oe
    ErrorLog /var/log/odoo/odoo-error.log
    CustomLog /var/log/odoo/odoo-access.log combined
    <Directory /opt/odoo/odoo>
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我的wsgi配置文件:

import sys
import os
import site
#Activate virtualenv
activate_this = os.path.expanduser("/opt/odoo/venv/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))

site.addsitedir('/opt/odoo/venv/lib/python2.7/site-packages/')
sys.path.append("/opt/odoo/odoo")
import openerp


#----------------------------------------------------------
# Common
#----------------------------------------------------------
openerp.multi_process = True # Nah!

# Equivalent of --load command-line option
openerp.conf.server_wide_modules = ['web']
conf = openerp.tools.config

# Path to the OpenERP Addons repository (comma-separated for
# multiple locations)

conf['addons_path'] = '/path/to/addons/'

在 wsgi 文件中激活 virtualenv 似乎什么也没做。如果我将 apache 站点配置 python-path 更改为 /opt/venv/lib/python2.7/site-packages/,然后我开始收到不同的错误,说运行时版本是 2.6,编译时版本是 2.7。像这样:

/opt/odoo/odoo/openerp/osv/orm.py:2: RuntimeWarning: compiletime version 2.7 of module 'lxml.etree' does not match runtime version 2.6

有人对此有任何解决方案吗?

【问题讨论】:

    标签: apache python-2.7 virtualenv wsgi python-2.6


    【解决方案1】:

    终于找到了解决方案(帮助我解决它的参考http://jamesseibel.com/blog/?p=45)。

    首先我删除了旧的 mod_wsgi 文件:

    rm -rf /usr/lib/apache2/modules/mod_wsgi*
    

    然后以这种方式下载并安装mod_wsgi:

    wget https://github.com/GrahamDumpleton/mod_wsgi/archive/master.zip
    unzip master
    cd mod_wsgi-master
    sudo ./configure --with-python=/path/to/bin/python2.7
    sudo LD_RUN_PATH=/usr/local/lib make
    sudo make install
    

    现在它在 python2.7 上运行

    【讨论】:

    • 你也可以在apache配置文件中指定虚拟环境位置为WSGIDaemonProcess python-home=path-to-your-venv
    猜你喜欢
    • 2014-05-26
    • 2013-01-22
    • 2015-02-25
    • 2013-12-22
    • 2014-02-11
    • 2014-05-28
    • 2018-10-18
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多