【发布时间】:2015-09-18 02:13:38
【问题描述】:
我正在使用virtualenv、apache2 和mod_wsgi 在 Ubuntu 上运行一个小型 Django 服务器。
我在 windows 和 linux 上都使用 python3 创建了 virtualenv。 pip --version
显示:
(env)lbr@irma-fr:/var/www/irmaweb/irmaweb$ pip --version
pip 7.0.3 from /var/www/irmaweb/env/lib/python3.4/site-packages (python 3.4)
它在 Windows 上运行良好,但在我的 Ubuntu 服务器上部署时出现以下错误:
错误是因为Django在/var/www中创建了一个新的空数据库,而不是在我的项目根目录中使用./manage.py migrate创建的数据库:
(env)lbr@irma-fr:/var/www/irmaweb/irmaweb$ ls -al /var/www
total 20
drwxrws--- 5 lbr www-data 4096 Jul 1 05:58 .
drwxr-xr-x 12 root root 4096 Jun 26 09:53 ..
-rw-r--r-- 1 www-data www-data 0 Jul 1 05:58 dev.db
但我认为问题的根源是因为 Django 是从 python2 调用的,如屏幕截图所示,而不是像我的 virtualenv 配置那样被 python3 调用。
下面是我的apache2 配置:
(env)lbr@irma-fr:/var/www/irmaweb/irmaweb$ cat /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
WSGIDaemonProcess irmaweb python-path=/var/www/irmaweb/irmaweb:/var/www/irmaweb/env/lib/python3.4/site-packages
WSGIProcessGroup irmaweb
WSGIScriptAlias / /var/www/irmaweb/irmaweb/irmaweb/wsgi.py
Alias /site_media/static/ /var/www/irmaweb/irmaweb/irmaweb/site_media/static/
所以我想我错过了一些东西!如何告诉 apache/wsgi 从我的 virtualenv 文件夹中调用 python:
(env)lbr@irma-fr:/var/www/irmaweb$ ls -al env/bin/python*
lrwxrwxrwx 1 lbr www-data 7 Jun 30 15:19 env/bin/python -> python3
-rwxrwxr-x 1 lbr www-data 4061272 Jun 30 15:19 env/bin/python3
lrwxrwxrwx 1 lbr www-data 7 Jun 30 15:19 env/bin/python3.4 -> python3
而不是使用 /usr/bin 中的系统 python 吗?
【问题讨论】:
-
在我意识到我需要使用我想要运行应用程序的 Python 解释器专门编译
mod_wsgi之前,我遇到了类似的问题。我还必须在我的 httpd.conf 中包含我编译的模块。一旦我这样做了,它就起作用了。也许我应该包括其中一些信息作为答案,但我不知道它是否会有所帮助。 -
你能发布你的wsgi脚本吗?那是你激活你的 virtualenv 的地方
-
正如其他人指出的那样,mod_wsgi 是为特定的 Python 主要/次要版本编译的。您不能强制为 Python 2.7 编译的 mod_wsgi 模块使用 Python 3.4 虚拟环境。如果使用系统 Python 3.4,则卸载 Python 2.7 的系统 mod_wsgi 包并安装 Python 3.4 版本。对于 Debian/Unbuntu 系统,适用于 OS Python 3.4 的 Python 3.4 变体在包名称上具有“-py3”后缀。如果操作系统没有提供 mod_wsgi 的 Python 3.4 变体,您将需要自己根据 Python 3.4 从源代码构建它。
-
@GrahamDumpleton,嗯,我完全只是在我的回答中链接了你的图书馆。感谢您使用开源工具。
-
是的。看到您的回复并感谢您提供的详细信息。只是想提供一些额外的确认。
标签: python django apache virtualenv