首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在本地测试Heroku python应用程序?ImportError:没有名为wsgi的模块

如何在本地测试Heroku python应用程序?ImportError:没有名为wsgi的模块
EN

Stack Overflow用户
提问于 2016-12-01 14:15:05
回答 2查看 961关注 0票数 1

第一次在这里使用Heroku。我想托管一个python应用程序。开始了解事情是如何运作的。我想使用heroku local命令在本地测试我的应用程序,但是我得到了以下错误:

ImportError:没有名为wsgi的模块

这是我的档案:

Procfile:

代码语言:javascript
复制
web: gunicorn choposcope.wsgi --log-file -

myapp.wsgi:

代码语言:javascript
复制
from choposcope import app as application

错误堆栈跟踪:

代码语言:javascript
复制
[2016-12-01 18:36:21 +0100] [9916] [INFO] Starting gunicorn 19.6.0
6:36:21 PM web.1 |  [2016-12-01 18:36:21 +0100] [9916] [INFO] Listening at: http://0.0.0.0:5000 (9916)
6:36:21 PM web.1 |  [2016-12-01 18:36:21 +0100] [9916] [INFO] Using worker: sync
6:36:21 PM web.1 |  [2016-12-01 18:36:21 +0100] [9919] [INFO] Booting worker with pid: 9919
6:36:34 PM web.1 |  [2016-12-01 18:36:34 +0100] [9919] [ERROR] Exception in worker process
6:36:34 PM web.1 |  Traceback (most recent call last):
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
6:36:34 PM web.1 |      worker.init_process()
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 126, in init_process
6:36:34 PM web.1 |      self.load_wsgi()
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
6:36:34 PM web.1 |      self.wsgi = self.app.wsgi()
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
6:36:34 PM web.1 |      self.callable = self.load()
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
6:36:34 PM web.1 |      return self.load_wsgiapp()
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
6:36:34 PM web.1 |      return util.import_app(self.app_uri)
6:36:34 PM web.1 |    File "/Users/Yann/Documents/dev/choposcope/env/lib/python2.7/site-packages/gunicorn/util.py", line 357, in import_app
6:36:34 PM web.1 |      __import__(module)
6:36:34 PM web.1 |  ImportError: No module named wsgi
6:36:34 PM web.1 |  [2016-12-01 18:36:34 +0100] [9919] [INFO] Worker exiting (pid: 9919)
6:36:34 PM web.1 |  [2016-12-01 18:36:34 +0100] [9916] [INFO] Shutting down: Master
6:36:34 PM web.1 |  [2016-12-01 18:36:34 +0100] [9916] [INFO] Reason: Worker failed to boot.
[DONE] Killing all processes with signal  null
6:36:34 PM web.1 Exited with exit code 3

另外,我不知道wsgi模块是否应该在默认情况下用烧瓶安装。当我试图在虚拟环境中运行pip install mod_wsgi时,会得到以下错误:

代码语言:javascript
复制
pip install mod_wsgi
Collecting mod_wsgi
  Using cached mod_wsgi-4.5.9.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/setup.py", line 284, in <module>
        APR_INCLUDES = get_apr_includes().split()
      File "/private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/setup.py", line 245, in get_apr_includes
        stdout=subprocess.PIPE, stderr=subprocess.PIPE)
      File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
        errread, errwrite)
      File "/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/_1/bhy3l2kj5l36_859j956y87m0000gn/T/pip-build-h3zlPa/mod-wsgi/
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 00:01:50

在您提供的命令行中,gunicorn希望您有一个名为:

代码语言:javascript
复制
choposcope/wsgi.py

您没有显示如何设置目录和文件的结构,但错误指示不存在这样的文件。

尽管有一种方法可以在Heroku上安装mod_wsgi,但我不推荐它,因为该机制不受积极支持。

如果您打算使用gunicorn进行本地开发,以匹配Heroku上使用的内容,您也不需要在那里安装mod_wsgi-express,尽管如果您想要使用mod_wsgi-express (而不是手动Apache/mod_wsgi配置),则没有理由不能使用mod_wsgi进行开发,这与其他可用的选项一样容易。

由于不知道您使用的是什么文件系统结构,我猜想您需要做的是将文件myapp.wsgi重命名为wsgi.py。然后将Procfile更改为:

代码语言:javascript
复制
web: gunicorn wsgi --log-file -

wsgi参数是Python模块的名称,因此需要调用wsgi.py文件。当使用gunicorn时,它期望WSGI应用程序入口点在默认情况下是application。您也可以在没有wsgi.py文件的情况下逃走,并使用:

代码语言:javascript
复制
web: gunicorn choposcope:app --log-file -

至于为什么pip install mod_wsgi在本地安装时失败,这很可能是因为MacOS X上没有安装Xcode developer命令行工具。或者您在HomeBrew中安装了一个损坏或不完整的Apache。

票数 2
EN

Stack Overflow用户

发布于 2016-12-01 15:53:45

你不必下载它,你必须创建它。

文件的内容必须是:

代码语言:javascript
复制
from yourapplication import app as application

有关更多信息,请参见瓶文档:wsgi/#creating-a-wsgi-file

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40912891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档