我对django的工作方式感到非常困惑。我遵循了一些指南并测试了一个示例应用程序,并让它在我的本地开发计算机上运行。效果很好。但是,当我将此示例应用移动到生产服务器时,出现此错误:
# cd /var/www/html/helloapp
# python manage.py runserver
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
因此,在设置示例应用期间,我执行以下操作:
$ sudo apt-get install python-django
然后:
$ django-admin startproject helloapp
然后:
$ cd /var/www/html/django-project/helloapp/
然后:
$ python manage.py runserver
结果:
成功了!恭喜你的第一个 Django 驱动的页面。
因此,我将文件 helloapp/传输到我的生产服务器中:
# cd /var/www/html/helloapp
# python manage.py runserver
然后是错误:
没有名为 django.core.management 的模块
我是否必须在生产服务器中安装python-django
-"全局">作为生产服务器中的系统软件之一?
django.core.management
到底是为了什么?我可能需要很多这样的模块来运行我的应用程序。那么这些模块是来自django的"全局"吗?
如果我的系统坏了,或者有一天我删除了python-django
,我所有的django应用程序也会坏吗?
编辑:
我让它使用虚拟环境运行,但它似乎gunicorn
有问题:
$ gunicorn helloapp.wsgi
[2017-05-18 22:33:37 +0000] [882] [INFO] Starting gunicorn 19.6.0
[2017-05-18 22:33:37 +0000] [882] [INFO] Listening at: http://127.0.0.1:8000 (882)
[2017-05-18 22:33:37 +0000] [882] [INFO] Using worker: sync
[2017-05-18 22:33:37 +0000] [886] [INFO] Booting worker with pid: 886
[2017-05-18 22:33:37 +0000] [886] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 557, in spawn_worker
worker.init_process()
File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 136, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 384, in import_app
__import__(module)
File "/var/www/html/django-project/helloapp/helloapp/wsgi.py", line 12, in <module>
from django.core.wsgi import get_wsgi_application
ImportError: No module named django.core.wsgi
[2017-05-18 22:33:37 +0000] [886] [INFO] Worker exiting (pid: 886)
[2017-05-18 22:33:37 +0000] [882] [INFO] Shutting down: Master
[2017-05-18 22:33:37 +0000] [882] [INFO] Reason: Worker failed to boot.
是的,你必须在生产服务器上安装 django。 我个人使用虚拟环境来解决这个问题,请尝试
sudo apt-get install python-virtualenv
virtualenv env_name
source env_name/bin/activate
完成此操作后,您应该会在 pwd 前面看到您的环境名称。这将允许您仅在该环境中安装 python 包。但是,当然,您还必须在生产服务器中使用它......
你能确认你已经安装了Django
吗?
sudo pip install django --upgrade
要使用 virtualenv,请先安装它
pip install virtualenv
创建一个新的环境(不应该在 Django 项目中)
virtualenv my_env
在此文件夹中,您可以激活环境
. bin/activate
一旦 env 处于活动状态,你就会安装 django
pip install django
然后回到 django 项目并运行
python manage.py runserver
应该工作
更多信息在这里
我必须在生产服务器中安装 python-django 吗
是的,django 必须像在开发服务器上安装一样安装在生产服务器上