python - Apache mod_wsgi 使用的 python 版本与 python-path 和 WSGIPythonHome 中提到的版本不同

标签 python django apache python-2.7 mod-wsgi

有很多类似的问题,但我已经解决了所有问题,但没有一个能解决我的问题。我已经在 Centos 6 中配置了 httpd 以使用 mod_wsgi 运行 django。由于 dist python 是 2.6 版,我编译并安装了 python2.7 (UCS2, shared-lib)。在 /var/www/uatenv

下使用 virtualenv -p/usr/local/bin/python2.7 创建了一个虚拟环境
<VirtualHost *:8080>
    Alias /static/ /var/www/uatenv/my_app/static/
    WSGIDaemonProcess rbuat python-path=/var/www/my_app/core:/var/www/uatenv/lib/python2.7/site-packages
    WSGIProcessGroup rbuat
    WSGIScriptAlias / /var/www/uatenv/my_app/core/wsgi.py
</VirtualHost>

但是服务器抛出 500 错误并且它使用的是不同版本的 python 为了获得更多详细信息,我在 wsgi.py 中添加了几行,如下所示

import sys
print sys.version
print sys.executable
print sys.maxunicode
print sys.prefix

重启服务器后从日志中获取以下详细信息

[notice] Apache/2.2.15 (Unix) DAV/2 mod_wsgi/4.4.21 Python/2.7.10 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
[error] 2.7.10 (default, Dec 29 2015, 07:15:09)
[error] [GCC 4.4.7 20120313 (Red Hat 4.4.7-16)]
[error] /usr/bin/python
[error] 1114111
[error] /usr/local
[error] [client 10.3.35.113] mod_wsgi (pid=7118): Target WSGI script '/var/www/uatenv/my_app/core/wsgi.py' cannot be loaded as Python module.
[error] [client 10.3.35.113] mod_wsgi (pid=7118): Exception occurred processing WSGI script '/var/www/uatenv/my_app/core/wsgi.py'.
[error] [client 10.3.35.113] Traceback (most recent call last):
[error] [client 10.3.35.113]   File "/var/www/uatenv/my_app/core/wsgi.py", line 17, in <module>
[error] [client 10.3.35.113]     from django.core.wsgi import get_wsgi_application
[error] [client 10.3.35.113]   File "/var/www/uatenv/lib/python2.7/site-packages/django/__init__.py", line 1, in <module>
[error] [client 10.3.35.113]     from django.utils.version import get_version
[error] [client 10.3.35.113]   File "/var/www/uatenv/lib/python2.7/site-packages/django/utils/version.py", line 5, in <module>
[error] [client 10.3.35.113]     import subprocess
[error] [client 10.3.35.113]   File "/usr/local/lib/python2.7/subprocess.py", line 430, in <module>
[error] [client 10.3.35.113]     import pickle
[error] [client 10.3.35.113]   File "/usr/local/lib/python2.7/pickle.py", line 34, in <module>
[error] [client 10.3.35.113]     import struct
[error] [client 10.3.35.113]   File "/usr/local/lib/python2.7/struct.py", line 1, in <module>
[error] [client 10.3.35.113]     from _struct import *
[error] [client 10.3.35.113] ImportError: /usr/local/lib/python2.7/lib-dynload/_struct.so: undefined symbol: PyUnicodeUCS2_AsEncodedString

所以从日志来看它正在使用/usr/bin/python 并显示 2.7 但是当我跑的时候

# /usr/bin/python
Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)

我的问题是:

  1. 为什么不使用我在 wsgi 配置中提供的 python?
  2. 如果它正在使用/usr/bin/python,那么为什么它显示为 2.7?
  3. 如何让我的服务器运行 python 2.7?

最佳答案

1) 检查

site.addsitedir('/var/www/uatenv/lib/python2.7/site-packages')

行存在或未指向您的 /var/www/uatenv/my_app/core/wsgi.py 文件中的另一路径。

2) /usr/bin/python是链接文件

3)

sudo mv /usr/bin/python /root/python.backup  

这会在根目录下备份 python 文件。然后:

sudo ln -s /usr/bin/python2.7 /usr/bin/python

关于python - Apache mod_wsgi 使用的 python 版本与 python-path 和 WSGIPythonHome 中提到的版本不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34626775/

相关文章:

apache - 仅用于重定向的子域

apache - 我怎样才能使 Apache 重写不破坏图像?

python - 将单例维度添加到 NumPy 向量以便切片分配工作的有效方法

Python查找没有特定数字的最长数字串

django - 如何测试 Django FileField 是否为空?

java - 将 .html 请求从 Apache 服务器重定向到 Tomcat 服务器

python - 对不返回值的函数使用 map()

python - R 中是否有类似于 Python 的 % 的字符串格式化运算符?

python - 如何将 JSON 转储从表单填充到 Django 模板?

用于权限的 Django 装置