问题 不支持Gunicorn按文件名导入(模块)


我新创建了一个容器ubuntu并在虚拟环境中安装了所需的包。然后我通过python path /到/ my / file / X.py(在virualenv中)执行了预先存在的python服务代码,它运行正常。所以我用枪炮作为gunicorn -b 0.0.0.0:5000路径/到/ my / file / X:app(在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,它在那里工作正常。


4155
2017-11-11 17:05


起源



答案:


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

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

14
2017-11-11 17:37



感谢您的立即回复,但我在import_app中更改了“文件”/usr/lib/python2.7/dist-packages/gunicorn/util.py“,第362行后收到同样的错误 import __(module)ImportError:没有名为var.www.o9_prod.dev.myprojectenv .__ init的模块:app'。我还有一个疑问是它的路径是'/usr/lib/python2.7/dist-packages/gunicorn',但我的虚拟环境路径是'var / www / prod / myvirtualenv / bin'。所以我因此而得到这个错误? - gopinath
这不是同一个错误。而你没有按照我所说的去做:路径必须来自virtualenv的根源。 - Daniel Roseman
哦对不起,所以请你检查一下这是一个正确的命令开始枪炮“gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app”如果我弄错了请指正 - gopinath
不,我怎样才能让这个更清楚?用一个 模块路径。你的“app”对象真的在里面 __init__.py 在你的virtualenv的根?这是一个奇怪的地方;把它放在一个正确命名的模块中,如“mysite.py”然后做 gunicorn mysite:app。 - Daniel Roseman
gunicorn“gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app”如果我弄错了请指正。为了更好地理解我的python文件在/var/www/prod/__init__.py和/ var / www / prod / myvirtualenv / bin中的vitualenv - gopinath


答案:


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

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

14
2017-11-11 17:37



感谢您的立即回复,但我在import_app中更改了“文件”/usr/lib/python2.7/dist-packages/gunicorn/util.py“,第362行后收到同样的错误 import __(module)ImportError:没有名为var.www.o9_prod.dev.myprojectenv .__ init的模块:app'。我还有一个疑问是它的路径是'/usr/lib/python2.7/dist-packages/gunicorn',但我的虚拟环境路径是'var / www / prod / myvirtualenv / bin'。所以我因此而得到这个错误? - gopinath
这不是同一个错误。而你没有按照我所说的去做:路径必须来自virtualenv的根源。 - Daniel Roseman
哦对不起,所以请你检查一下这是一个正确的命令开始枪炮“gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app”如果我弄错了请指正 - gopinath
不,我怎样才能让这个更清楚?用一个 模块路径。你的“app”对象真的在里面 __init__.py 在你的virtualenv的根?这是一个奇怪的地方;把它放在一个正确命名的模块中,如“mysite.py”然后做 gunicorn mysite:app。 - Daniel Roseman
gunicorn“gunicorn -b 0.0.0.0:5000 /var/www/prod/myvirtualenv.__init__:app”如果我弄错了请指正。为了更好地理解我的python文件在/var/www/prod/__init__.py和/ var / www / prod / myvirtualenv / bin中的vitualenv - gopinath


仅仅对于googlers,当我意外地使用gunicorn -paste而不是gunicorn --paste运行我的应用程序时,我也遇到了这个错误。 gunicorn没有错误,但是没有找到api.ini并且它抛出'不支持导入文件名'错误。


0
2017-08-18 02:36





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

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

希望这可以帮助


0
2018-06-29 07:33