【问题标题】:Gunicorn Import by filename is not supported (module)不支持按文件名导入 Gunicorn(模块)
【发布时间】:2015-11-11 17:05:00
【问题描述】:

我新创建了一个容器 ubuntu 并在虚拟环境中安装了所需的包。然后我通过 python path/to/my/file/X.py (在 virualenv 中)执行了预先存在的 python 服务代码,它工作正常。所以我用 gunicorn 作为 gunicorn -b 0.0.0.0:5000 path/to/my/file/X:app (in virualenv) 执行,但我收到以下错误

2015-11-11 16:38:08 [19118] [INFO] Starting gunicorn 17.5
2015-11-11 16:38:08 [19118] [INFO] Listening at: http://0.0.0.0:444 (19118)
2015-11-11 16:38:08 [19118] [INFO] Using worker: sync
2015-11-11 16:38:08 [19123] [INFO] Booting worker with pid: 19123
2015-11-11 16:38:08 [19123] [ERROR] Exception in worker process:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 473, in spawn_worker
    worker.init_process()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 100, in init_process
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 115, in wsgi
    self.callable = self.load()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 33, in load
    return util.import_app(self.app_uri)
  File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 362, in import_app
    __import__(module)
ImportError: Import by filename is not supported.
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 473, in spawn_worker
    worker.init_process()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 100, in init_process
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 115, in wsgi
    self.callable = self.load()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 33, in load
    return util.import_app(self.app_uri)
  File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 362, in import_app
    __import__(module)
ImportError: Import by filename is not supported.
2015-11-11 16:38:08 [19123] [INFO] Worker exiting (pid: 19123)
2015-11-11 16:38:09 [19118] [INFO] Shutting down: Master

谁能帮我修复ImportError: Import by filename is not supported。为什么会来?我已经在其他服务器上实现了 gunicorn,它在那里运行良好。

【问题讨论】:

    标签: python containers gunicorn


    【解决方案1】:

    就像错误说的:你不能通过文件路径引用 Python 模块,你必须通过从 PYTHONPATH 中的目录开始的虚线模块路径来引用它。

    gunicorn -b 0.0.0.0:5000 path.inside.virtualenv.X:app
    

    【讨论】:

    • 感谢您的即时回复,但在更改文件“/usr/lib/python2.7/dist-packages/gunicorn/util.py”后,我遇到了同样的错误,第 362 行import_app import__(module) ImportError: No module named var.www.o9_prod.dev.myprojectenv.__init:app' 。我对此还有一个疑问,它的路径为 '/usr/lib/python2.7/dist-packages/gunicorn' 但我的虚拟环境路径是 'var/www/prod/myvirtualenv/bin' 。所以我会因为这个而收到这个错误吗?
    • 这不是同一个错误。而且你没有按照我说的去做:路径必须来自 virtualenv 的根目录。
    • 抱歉,请问这是启动 gunicorn "gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app" 的正确命令,如果我'我错了,请纠正我
    • 没有。我怎样才能更清楚地说明这一点?使用模块路径。您的“应用程序”对象真的在您的 virtualenv 根目录中的 __init__.py 内吗?这是一个奇怪的地方。将它放在一个正确命名的模块中,如“mysite.py”,然后执行gunicorn mysite:app
    • gunicorn "gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app" 如果我​​弄错了,请纠正我。为了更好地理解我的 python 文件在 /var/www/prod/__init__.py 和 vitualenv 在 /var/www/prod/myvirtualenv/bin
    【解决方案2】:

    我遇到了同样的问题,我使用 --chdir /path/to/project 解决了它

    gunicorn -b :5000 --chdir /path/to/project X:app
    

    希望对你有帮助

    【讨论】:

    • 这是完美的,因为我希望 Gunicorn 服务的 wsgi 文件位于已经包含 . (/python2.7/) 的文件路径中,因此虚线模块路径失败。谢谢。
    • 太棒了,很高兴这有帮助
    【解决方案3】:

    对于谷歌员工来说,当我不小心使用 gunicorn -paste 而不是 gunicorn --paste 运行我的应用程序时,我也遇到了这个错误。 gunicorn 没有出错,但没有找到 api.ini,它抛出了“不支持按文件名导入”错误。

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 2018-02-10
      • 2014-11-17
      • 2012-02-02
      • 2016-04-01
      • 2018-02-18
      • 2016-08-17
      • 2020-05-01
      • 2012-12-19
      相关资源
      最近更新 更多