Python Gunicorn ImportError:只有在目录名为site时才没有模块名应用程序

Python Gunicorn ImportError:只有在目录名为site时才没有模块名应用程序,python,flask,gunicorn,Python,Flask,Gunicorn,正在尝试使用hello world应用程序运行gunicorn。 这是我的项目目录结构 Project |_ config | |_ ___init__.py | |_ settings.py | |_ instance | |_settings.py_production | |_ site | |_ __init__.py | |_ app.py | |_ .env |_ docker-compose.yml |_ Docke

正在尝试使用hello world应用程序运行gunicorn。
这是我的项目目录结构

Project
  |_ config
  |  |_ ___init__.py
  |  |_ settings.py
  |
  |_ instance
  |  |_settings.py_production
  |
  |_ site
  |  |_ __init__.py
  |  |_ app.py
  |
  |_ .env
  |_ docker-compose.yml
  |_ Dockerfile
  |_ requirements.txt
我在docker容器中运行此操作,但当我以交互模式进入容器时,会发生相同的行为


当目录名为
site
并且我运行命令
gunicorn-b0.0.0:8000——访问日志文件-“site.app:create_app()”
时,我得到一个错误
ImportError:No module name app
。但是,如果我将目录命名为
foo
snakeeyes
blah
,则不会收到错误,应用程序会按预期运行。这有什么原因吗?目录不能被命名为站点吗?python中还有其他重新排序的目录名吗?

站点是python中目录名的一部分。我假设,但不是肯定的,你正在经历一场冲突

site
在python中不是保留字。如果您对标准关键字感兴趣,可以查看此SO帖子:

我认为您可以通过按照文档的指示抑制库的自动导入来测试这是否是冲突:

This module is automatically imported during initialization. The automatic import can be suppressed using the interpreter’s -S option.

您不应该调用与Python标准库中的任何模块相同的模块,因为根据模块导入路径的顺序,您将得到错误的模块。运行
gunicorn-S-b0.0.0.0:8000--access日志文件-“pickle.app:create_app()”
时抛出一个错误,指出-S不是有效选项。不过,我还是看了一下网站所在的改进模块下的列表。我将所有内容重命名为另一个模块
pickle
,得到了相同的
ImportError:没有名为app的模块
结果。我认为这是正确的答案。Gunicorn不是python的解释器。文档中提到了对python的实际调用。因此,类似于
python-S
。如果您想尝试这个实验,您需要弄清楚如何通过gunicorn将命令行参数传递给python解释器。