Wsgi 脚本和最新的 django Python 3.5

Wsgi script and the newest django with Python 3.5

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

现在我们需要另一个 - django 应用程序。我们已经配置了我们的 apache2 来托管两者(django 在子域上工作,而 flask 在 'root' 域上。这里一切都很好。 但是,由于 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,但是由于已建立的 flask 应用程序正在生产中,我们的经理不允许我们这样做。可能没关系

如果我们使用 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/2 and https://docs.djangoproject.com/en/3.0/intro/tutorial01/ ("This tutorial is written for Django 3.0, which supports Python 3.6 and later ... ")

最好的步骤是什么?尝试下载并建立 python 3.6 或更新版本并将我们的 wsgi 引用到该版本或尝试使用其他版本的 django ...?

提前致谢!

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

pip3 install <package-name>

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

sudo pip3 install <package-name> 

并设法将问题本地化