2017-10-05 46 views
0

我在Ubuntu上使用django 1.11,但非虚拟python有1.6。还有其他应用程序使用1.6。当我通过Apache mod_wsgi运行我的应用程序时,它使用1.6而不是1.11,并且我得到堆栈跟踪。Django无法在virutalenv中使用django版本

的Apache的conf:

WSGIPythonPath /home/wondi/envs/my_app 
    <VirtualHost *:80> 
     ServerName server.com 
     ServerAdmin [email protected] 

     ErrorLog /var/log/apache2/error.log 
     LogLevel warn 
     CustomLog /var/log/apache2/access.log combined 

     WSGIDaemonProcess server.com processes=2 threads=15 display-name=%{GROUP} 
     WSGIProcessGroup server.com 
     WSGIPassAuthorization On 
     WSGIScriptAlias /my_app /home/wondi/envs/my_app/my_app/wsgi.py 

     <Directory "/home/wondi/envs/my_app/my_app/"> 
      <Files wsgi.py> 
       Order deny,allow 
       Require all granted 
      </Files> 
     </Directory> 

     <Directory /home/wondi/envs/my_app/app/static/> 
      Options Indexes FollowSymLinks 
      AllowOverride None 
      Require all granted 
      IndexOptions FancyIndexing 
     </Directory> 

    ... 
    </VirtualHost> 

程序my_app \ wsgi.py:

import os 
    import sys 
    from django.core.wsgi import get_wsgi_application 

    import site 

    env_path = '/home/wondi/envs/lib/python2.7/site-packages' 
    # we add currently directory to path and change to it 
    working_dir = os.path.dirname(os.path.abspath(__file__)) 
    os.chdir(working_dir) 
    sys.path = [working_dir] + sys.path 

    # Append paths 
    site.addsitedir(env_path) 

    sys.path.append('/home/wondi/envs/') 
    sys.path.append('/home/wondi/envs/my_app/') 

    os.environ["DJANGO_SETTINGS_MODULE"] = "my_app.settings" 

    activate_this = "/home/wondi/envs/bin/activate_this.py" 
    execfile(activate_this, dict(__file__=activate_this)) 

    application = get_wsgi_application() 

堆栈跟踪:

Django Version: 1.6.1 
    Python Version: 2.7.6 
    Installed Applications: 
    ['django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.gis', 
    'django.contrib.staticfiles', 
    'rest_framework', 
    'rest_framework_gis', 
    'corsheaders', 
    'my_app'] 
    Installed Middleware: 
    ('django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware') 


    Traceback: 
    File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
     99.     resolver_match = resolver.resolve(request.path_info) 
    File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve 
     337.    for pattern in self.url_patterns: 
    File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns 
     365.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "/usr/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module 
     360.    self._urlconf_module = import_module(self.urlconf_name) 
    File "/usr/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module 
     40.   __import__(name) 
    File "/home/wondi/envs/my_app/my_app/urls.py" in <module> 
     19. from rest_framework.urlpatterns import format_suffix_patterns 
    File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/urlpatterns.py" in <module> 
     5. from rest_framework.compat import RegexURLResolver, include 
    File "/home/wondi/envs/lib/python2.7/site-packages/rest_framework/compat.py" in <module> 
     12. from django.apps import apps 

    Exception Type: ImportError at/
    Exception Value: No module named apps 

是疗法e我错过了什么或者可以做什么来解决这个问题?

+0

我会说,你应该修改的sys.path之前激活的virtualenv或导入任何内容你导入django.core.wsgi的那一分钟,你从你的virtualenv中导入了django。当你运行激活(不应该是一个shell脚本?)你修改你的env变量,覆盖你设置的变量。所以尝试重新排序你的wsgi.py(字面意思是反向)。 – cowbert

+0

我完全明白。这正是你所说的。它正在工作。你能把它作为答案吗? – wondie

+2

阅读http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html,其中显示了使用mod_wsgi设置虚拟环境的首选方式。 –

回答