python-3.x 执行setup.cfg中的console_scripts时出错

sdnqo3pr  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(168)

当运行setup.cfg中定义的console_script入口点时,我收到以下错误。不确定为什么它会抱怨位置参数。

start-prediction-engine
Traceback (most recent call last):
  File "/usr/local/bin/start-prediction-engine", line 8, in <module>
    sys.exit(app())
TypeError: __call__() missing 3 required positional arguments: 'scope', 'receive', and 'send'

以下是setup.cfg文件中的内容

[options.entry_points]
console_scripts =
  start-prediction-engine = prediction_engine.prediction_engine:app

在文件prediction_engine.py中

if __name__ == "__main__":
    uvicorn.run("prediction_engine:app", host="0.0.0.0", port=8888, reload=True, log_level="info")
fjaof16o

fjaof16o1#

我也掉进了同样的陷阱。
问题是您试图将控制台脚本注册到app对象(我假设它是一个FastAPI应用程序示例)。
控制台脚本必须注册到函数。有关详细信息,请参阅此处的介绍。
要解决此问题,您只需创建一个运行应用的函数:

# prediction_engine.py
def main():
    uvicorn.run("prediction_engine:app", 
                host="0.0.0.0", 
                port=8888, 
                reload=True,
                log_level="info")

if __name__ == "__main__":
    sys.exit(main())

如果总是从控制台脚本运行,则不必添加if __name__ == "__main__":部分,但这也允许您通过执行以下操作来运行它:

python prediction_engine.py

最后,您需要将setup.cfg中的console_script条目指向main()函数:

# setup.cfg
[options.entry_points]
console_scripts =
  start-prediction-engine = prediction_engine.prediction_engine:main

顺便说一句你得到的错误

TypeError: __call__() missing 3 required positional arguments: 'scope', 'receive', and 'send'

是当您尝试调用FastAPI app示例(即app())时发生的情况,这是生成的可执行文件所做的事情。

相关问题