python django + virtualenv + gunicorn -没有名为django.core.wsgi的模块?

hc2pp10m  于 2023-10-14  发布在  Python
关注(0)|答案(8)|浏览(102)

我在虚拟环境中安装了gunicorn

$ pip install gunicorn
Collecting gunicorn
  Using cached gunicorn-19.7.1-py2.py3-none-any.whl
Installing collected packages: gunicorn
Successfully installed gunicorn-19.7.1

但当我尝试运行我的应用程序与它:

$ gunicorn helloapp.wsgi
[2017-05-18 22:42:36 +0000] [1963] [INFO] Starting gunicorn 19.6.0
[2017-05-18 22:42:36 +0000] [1963] [INFO] Listening at: http://127.0.0.1:8000 (1963)
[2017-05-18 22:42:36 +0000] [1963] [INFO] Using worker: sync
[2017-05-18 22:42:36 +0000] [1967] [INFO] Booting worker with pid: 1967
[2017-05-18 22:42:36 +0000] [1967] [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:42:36 +0000] [1967] [INFO] Worker exiting (pid: 1967)
[2017-05-18 22:42:36 +0000] [1963] [INFO] Shutting down: Master
[2017-05-18 22:42:36 +0000] [1963] [INFO] Reason: Worker failed to boot.

我做错了什么?
这是我的应用程序结构:

有什么想法吗?
这是我的requirments.txt:

appdirs==1.4.3
Django==1.11.1
gunicorn==19.7.1
packaging==16.8
pyparsing==2.2.0
pytz==2017.2
six==1.10.0

编辑:

(env) xxx@xxx-desktop:/var/www/html/django-project/helloapp$ which gunicorn
/var/www/html/django-project/helloapp/env/bin/gunicorn

(env) xxx@xxx-desktop:/var/www/html/django-project/helloapp$ which pip
/var/www/html/django-project/helloapp/env/bin/pip
kcugc4gi

kcugc4gi1#

这可能不是这个特定的问题,但我遇到了类似的问题,并导致谷歌在这里。所以我把这个答案放在这里,希望对其他人有用。
对我来说,问题是gunicorn是由globally installed package运行的,而不是安装在虚拟环境中的那个。为了确保这是否是你的情况,只要简单地运行which gunicorn并检查它是否来自你的virtualenv bin目录。如果它不是来自虚拟env bin目录,请执行以下步骤:

  • 关闭了环境。
  • deactivate env
  • 卸载全局安装的gunicron
  • pip uninstall gunicorn
  • 启动环境。[我使用virtualenvwrapper进行virtualenv管理,我建议你这样做。]
  • workon env

现在Gunicorn应该像预期的那样工作。

a1o7rhls

a1o7rhls2#

我也有同样的问题,我解决了它删除gunicorn安装与系统包管理器(apt-get等)。
apt-get安装gunicorn到python 2的site-packagespip安装Django到python3的site-packages。所以Gunicorn和Django不在同一个site-packages目录中。所以古尼科恩找不到 Django 。将Gunicorn和Django安装在同一个包目录中应该可以解决这个问题。

snz8szmq

snz8szmq3#

/etc/systemd/system/gunicorn.service中,确保工作目录指向应用程序目录。

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=sammy
Group=www-data
WorkingDirectory=/home/sammy/myproject
ExecStart=/home/sammy/myproject/myprojectenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/sammy/myproject/myproject.sock myproject.wsgi:application
brccelvz

brccelvz4#

你应该像下面这样运行它:

gunicorn helloapp.wsgi:application
  • Gunicorn的基本用法:

gunicorn [OPTIONS] APP_MODULE
其中APP_MODULE$(MODULE_NAME):$(VARIABLE_NAME)的模式

fiei3ece

fiei3ece5#

正如这里和其他地方所指出的,错误消息所指出的问题的根源是gunicorn无法找到django模块。那么问题就变成了为什么会这样,可能有很多不同的原因。在我的情况下,在没有virtualenv的Ubuntu仿生主机上,这是因为我安装了python3-django和gunicorn(后者是python 2包)。
解决方案是安装python3-gunicorn,删除gunicorn并将gunicorn作为gunicorn3运行。

6psbrbz9

6psbrbz96#

错误目录:

检查您的当前目录,然后cd到正确的目录,然后再调用。

示例:

  • 不正确:*
~/project_name/main$ gunicorn3 --bind 0.0.0.0:8000 main.wsgi:application
  • 正确:*
~/project_name/main$ cd ..
~/project_name$ gunicorn3 --bind 0.0.0.0:8000 main.wsgi:application
dgenwo3n

dgenwo3n7#

我在用诗歌和Pyenv。在我的例子中,我运行的gunicorn示例引用了一个系统级安装,而不是安装在虚拟环境中的。我通过运行which gunicorn并将其与pyenv which gunicorn的输出进行比较来解决这个问题。
解决问题的方法是
$(pyenv which gunicorn) <app_name>.wsgi:application --bind 0.0.0.0

i86rm4rw

i86rm4rw8#

我使用了上面的答案和另一个解决方案的组合。我停用了虚拟环境并安装了Django,然后我激活了它并运行了如下命令:gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

相关问题