【发布时间】:2020-08-02 17:14:12
【问题描述】:
我们正在尝试在我们的 VPS 上再部署一个 Web 应用程序。 已经有一个烧瓶应用程序在生产中,由 Python 3.5 解释器保存。
现在我们需要另一个 - django 应用程序。我们已经将我们的 apache2 配置为同时托管两者(django 正在处理子域,而烧瓶位于“根”域。这里一切正常。 但是,由于烧瓶应用程序正在使用全局 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/2 和 https://docs.djangoproject.com/en/3.0/intro/tutorial01/(“本教程是为 Django 3.0 编写的,它支持 Python 3.6 及更高版本……”)
这里最好的步骤是什么?尝试下载并建立 python 3.6 或更新版本并将我们的 wsgi 引用到那个或尝试使用另一个版本的 django ...?
提前谢谢你!
【问题讨论】:
-
Django 2.2 支持 Python 3.5,是一个长期支持版本,支持到 2022 年 4 月。
-
使用virtualenvs并通过在创建virtualenv时指定python版本来为python3.6创建一个virtualenv。
-
如果你在同一个系统上安装 Python 3.6,你会遇到 mod_wsgi 只能为一个 Python 版本编译的问题。您可以通过将mod_wsgi-express 安装到您的一个(或两个)虚拟环境中来解决此问题。
-
另外,考虑您是否可以在不同的 VPS 上安装 Django 应用程序。然后,您可以修改烧瓶和 Django 安装,而不会冒险破坏另一个(这似乎是您管理的优先事项)。缺点是成本会更高。
标签: python django python-3.5