首页 > 解决方案 > Wsgi 脚本和带有 Python 3.5 的最新 django

问题描述

我们正在尝试在我们的 VPS 上再部署一个 Web 应用程序。生产中已经有一个烧瓶应用程序,它由 Python 3.5 解释器保存。

现在我们需要另一个 - django 应用程序。我们已经将我们的 apache2 配置为同时托管两者(django 在子域上工作,而 flask 在“根”域上。这里一切正常。但是,由于 flask 应用程序使用全局 python 解释器(版本 3.5),我们无法运行 django因为它需要 3.6 或更高版本。

这是 django WSGI 脚本:

import os
import sys

print('Python version is ... ') # 3.5

python_home = '/var/www/mysite/venv'
activate_this = python_home + '/bin/activate_this.py'
exec(   open(activate_this).read()  )
print(sys.executable) # in case of virtualenv it refers to /usr/bin/python3.5
import logging
logging.basicConfig(stream=sys.stderr)

sys.path.insert(0,"/var/www/mysite/mysite")

from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
application = get_wsgi_application()

我们本可以将我们的解释器升级到 3.6,但是由于已建立的烧瓶应用程序正在生产中,我们的经理不允许我们这样做.. 可能没问题

但是,如果我们使用 virtualenv,它会使用现有的全局解释器创建虚拟环境,如 3.5 版以上所述。

这就是我们现在陷入困境的地方。Apache2 日志不断对我们说:

[wsgi:error] mod_wsgi (pid=10081): Target WSGI script '/var/www/mysite/mysite/wsgi.py' cannot be loaded as Python module.
[wsgi:error] mod_wsgi (pid=10081): Exception occurred processing WSGI script '/var/www/mysite/mysite/wsgi.py'.
[wsgi:error]  Traceback (most recent call last):
[wsgi:error]  File "/var/www/mysite/mysite/wsgi.py", line 18, in <module>
 [wsgi:error] from django.core.wsgi import get_wsgi_application
[wsgi:error]  ImportError: No module named 'django'

如果我们python3在终端中运行,然后from django.core.wsgi import get_wsgi_application 我们将 git 这个:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ivan/.local/lib/python3.5/site-packages/django/core/wsgi.py", line 2, in <module>
from django.core.handlers.wsgi import WSGIHandler
File "/home/ivan/.local/lib/python3.5/site-packages/django/utils/crypto.py", line 6, in <module>
import secrets
ImportError: No module named 'secrets'

我们假设升级会解决我们的问题,因为 django 需要 3.6 版 https://github.com/quolc/neural-collage/issues/2https://docs.djangoproject.com/en/3.0/intro/tutorial01/(“本教程是为 Django 3.0 编写的,它支持 Python 3.6 及更高版本......”)

这里最好的一步是什么?尝试下载并建立 python 3.6 或更新版本并将我们的 wsgi 引用到那个或尝试使用另一个版本的 django ...?

先感谢您!

标签: pythondjangopython-3.5

解决方案


就我而言,这很容易。我很愚蠢地用 sudo 权限安装和配置了我所有的 python 服务,这就是为什么当我这样做的时候

pip3 install <package-name>

一切顺利,但由于所有服务都在 root 下运行,我无法使用包,所以我做了

sudo pip3 install <package-name> 

并设法将问题本地化


推荐阅读