无法使用虚拟环境 运行 django wsgi
Unable to run django wsgi with virtual environment
我正在尝试 运行 我的 django 应用程序与 apache2 通过使用 wsgi 但似乎无法设置虚拟环境的使用。
为了安装 mod_wsgi
,我在 Ubuntu 16 上跟随 Serve Python 3.7 和 mod_wsgi
因为我正在使用 python3.7.
我用 virtualenv -p python3.7 venv
创建了一个虚拟环境
通过 python manage.py runserver
手动使用虚拟环境可以正常工作并按预期启动服务器。
为了使用 apache2 启动它,我将 my-app.conf
配置为:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
ProxyPass / http://0.0.0.0:8000/
ProxyPassReverse / http://127.0.0.1:8000/
<Directory /home/path/to/project/static>
Require all granted
</Directory>
<Directory /home/path/to/venv/>
Require all granted
</Directory>
<Directory /home/path/to/project/server>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project \
python-home=/home/path/to/venv/ \
python-path=/home/path/to/project/server/
WSGIProcessGroup project
WSGIScriptAlias /project /home/path/to/project/server/wsgi.py \
process-group=example.com \
application-group=%{GLOBAL}
Alias /static/ /home/path/to/project/static/
ErrorLog /var/log/apache2/mysite-error.log
LogLevel warn
CustomLog /var/log/apache2/mysite-access.log combined
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
和 my-app-ssl.conf
与:
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
</IfModule>
我最终收到错误:ImportError: No module named 'django'
这是基于未正确设置的venv。我在 wsgi.py
:
中添加了一些代码
for k in sorted(os.environ.keys()):
v = os.environ[k]
print ('%-30s %s' % (k,v[:70]))
并且可以明显看出,与使用 virtualenv 手动启动应用程序相比,它没有使用虚拟环境。
我的设置有什么问题,它没有使用虚拟环境?
所以我终于找到了解决方案。问题是 mod_wsgi 模块是用 Python3.5 构建的,虚拟环境使用 Python3.7.
按照此处所述手动构建 mod_wsgi Mod wsgi installation guide and linking the right one as described here 解决了问题
我正在尝试 运行 我的 django 应用程序与 apache2 通过使用 wsgi 但似乎无法设置虚拟环境的使用。
为了安装 mod_wsgi
,我在 Ubuntu 16 上跟随 Serve Python 3.7 和 mod_wsgi
因为我正在使用 python3.7.
我用 virtualenv -p python3.7 venv
创建了一个虚拟环境
通过 python manage.py runserver
手动使用虚拟环境可以正常工作并按预期启动服务器。
为了使用 apache2 启动它,我将 my-app.conf
配置为:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin webmaster@example.com
ProxyPass / http://0.0.0.0:8000/
ProxyPassReverse / http://127.0.0.1:8000/
<Directory /home/path/to/project/static>
Require all granted
</Directory>
<Directory /home/path/to/venv/>
Require all granted
</Directory>
<Directory /home/path/to/project/server>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess project \
python-home=/home/path/to/venv/ \
python-path=/home/path/to/project/server/
WSGIProcessGroup project
WSGIScriptAlias /project /home/path/to/project/server/wsgi.py \
process-group=example.com \
application-group=%{GLOBAL}
Alias /static/ /home/path/to/project/static/
ErrorLog /var/log/apache2/mysite-error.log
LogLevel warn
CustomLog /var/log/apache2/mysite-access.log combined
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>
和 my-app-ssl.conf
与:
<IfModule mod_ssl.c>
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
</IfModule>
我最终收到错误:ImportError: No module named 'django'
这是基于未正确设置的venv。我在 wsgi.py
:
for k in sorted(os.environ.keys()):
v = os.environ[k]
print ('%-30s %s' % (k,v[:70]))
并且可以明显看出,与使用 virtualenv 手动启动应用程序相比,它没有使用虚拟环境。
我的设置有什么问题,它没有使用虚拟环境?
所以我终于找到了解决方案。问题是 mod_wsgi 模块是用 Python3.5 构建的,虚拟环境使用 Python3.7.
按照此处所述手动构建 mod_wsgi Mod wsgi installation guide and linking the right one as described here 解决了问题