【问题标题】:Can't run python sanic on ec2无法在 ec2 上运行 python sanic
【发布时间】:2020-06-16 08:23:38
【问题描述】:

我在 ec2.(amazon linux2) 上尝试了下面的代码

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

运行良好。

当我将端口号更改为 80 时,如下所示

from sanic import Sanic
from sanic.response import json

app = Sanic()

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

系统回复,

main.py:4: DeprecationWarning: Sanic(name=None) is deprecated and None value support for `name` will be removed in the next release. Please use Sanic(name=‘your_application_name’) instead.
 app = Sanic()
[2020-06-16 08:16:15 +0000] [8303] [INFO] Goin’ Fast @ http://0.0.0.0:80
[2020-06-16 08:16:15 +0000] [8303] [ERROR] Unable to start server
Traceback (most recent call last):
 File “/home/ec2-user/sanic/lib64/python3.7/site-packages/sanic/server.py”, line 835, in serve
  http_server = loop.run_until_complete(server_coroutine)
 File “uvloop/loop.pyx”, line 1456, in uvloop.loop.Loop.run_until_complete
 File “uvloop/loop.pyx”, line 1727, in create_server
PermissionError: [Errno 13] error while attempting to bind on address (‘0.0.0.0’, 80): permission denied
[2020-06-16 08:16:15 +0000] [8303] [INFO] Server Stopped

所以接下来我做了

sudo python main.py

然后错误消息说,

File “main.py”, line 7
  async def test(request):
    ^
SyntaxError: invalid syntax

我不知道该怎么办。 给我一些建议。

我的文件夹如下所示

sanic/
 ├ bin/
 ├ includs/
 ├ lib/
 ├ lib64
 ├ main.py 
 └ pyvenv.cfg

【问题讨论】:

    标签: python sanic


    【解决方案1】:

    尝试使用:

    sudo python3 main.py

    【讨论】:

    • 我试过了,结果是Traceback (most recent call last): File "main.py", line 1, in <module> from sanic import Sanic ModuleNotFoundError: No module named 'sanic'
    【解决方案2】:

    谢天谢地,我自己找到了解决方案。 它是由 PATH 错误引起的,因为我使用了 venv。

    当我使用时

    sudo python3 main.py

    那么 sys.path 就像

    ['/home/ec2-user/sanic', '/usr/lib64/python37.zip', '/usr/lib64/python3.7', '/usr/lib64/python3.7/lib-dynload', '/usr/lib64/python3.7/site-packages'] 没有一个 PATH 包含“sanic”或我之前安装的任何模块。

    所以我加了

    import sys sys.path.append('/home/ec2-user/sanic/lib/python3.7/site-packages') 到 main.py

    然后它运行良好。

    因此,当您在 amazon linux2 上使用“sudo”时,它会从 venv 中退出。

    我也查了

    `sudo python main.py'

    然后返回

    File "main.py", line 15 async def heavy_task1(): ^ SyntaxError: invalid syntax

    我相信没有任何语法错误。 我不知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-03
      • 1970-01-01
      • 2020-01-09
      • 2019-03-01
      相关资源
      最近更新 更多