-1

我正在尝试在 linux 上的 apache 下移动 django 站点。我将指向我的站点的 vhost 设置为文件 wsgi.py。这很好用。我正在使用 virtualenv 来设置我的环境(只有一个 python 站点)。当 django 调用 Mysql 数据库时,问题就来了。它以ImportError 结尾:没有名为 'mysql.connector.django' 的模块但我能够导入 mysql.connector。

这是我在 wsgi.py 中的代码

import os
import sys
import site
sys.path.append('/var/www/com/langevo/src/dictionary_site')
sys.path.append('/var/www/com/langevo/src/dictionary_site/my_site')

output = 'test'

def application(environ, start_response):
    status = '200 OK'
    output = 'No!'

    # Activate  virtual env
    activate_env = '/usr/share/python/py33/bin/activate_this.py'
    with open(activate_env) as f:
        code = compile(f.read(), activate_env, 'exec')
        exec(code, dict(__file__=activate_env))

    # test if env is set
    if hasattr(sys, 'real_prefix'):
        output = '1'
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
        from django.conf import settings
        output = settings.BASE_DIR
        import mysql.connector  # works

        from game.dal import LanguageDal # raise exception ImportError: No module named 'mysql.connector.django'
        # data = LanguageDal.get_all_languages()
        output = '2'

    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

这是apache日志

[Thu Apr 10 13:45:26 2014] [info] [client 192.168.120.18] mod_wsgi (pid=8655, process='', application='dictionary.langevo.com|'): Reloading WSGI script '/var/www/com/langevo/src/dictionary_site/langevo_site/wsgi.py'.
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18] mod_wsgi (pid=8655): Exception occurred processing WSGI script '/var/www/com/langevo/src/dictionary_site/langevo_site/wsgi.py'.
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18] Traceback (most recent call last):
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "/usr/share/python/py33/lib/python3.3/site-packages/django/db/utils.py", line 113, in load_backend
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]     return import_module('%s.base' % backend_name)
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "/usr/lib64/python3.3/importlib/__init__.py", line 88, in import_module
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]     return _bootstrap._gcd_import(name[level:], package, level)
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1505, in _find_and_load_unlocked
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1577, in _gcd_import
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1558, in _find_and_load
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18]   File "<frozen importlib._bootstrap>", line 1522, in _find_and_load_unlocked
[Thu Apr 10 13:45:26 2014] [error] [client 192.168.120.18] ImportError: No module named 'mysql.connector.django'

Python 3.3 Django 是 1.6 wsgi 3.4

这是我的点子列表

decorator (3.4.0)
distribute (0.7.3)
Django (1.6.2)
django-filter (0.7)
django-uuidfield (0.5.0)
djangorestframework (2.3.13)
mysql-connector-python (1.1.6)
pip (1.4.1)
setuptools (0.9.8)

如果我从命令行运行相同的代码,它就可以工作。有什么不同吗?

4

1 回答 1

0

这是路径的问题。在 vhost.conf 中设置 WSGIPythonPath 解决了我的问题。

于 2014-04-10T18:04:31.080 回答