Не могу запустить python sani c на ec2 - PullRequest
0 голосов
/ 16 июня 2020

Я пробовал приведенный ниже код на 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)

Он работает нормально.

Bue, когда я изменил номер порта на 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

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

К счастью, я нашел решение самостоятельно. Это вызвано ошибкой 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'] Не существует ПУТИ, содержащего "sani c" или какой-либо другой модуль, который я установил ранее.

Поэтому я добавил

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

тогда он работает нормально.

Итак, когда вы используете «sudo» на amazon linux2, он выйдет из venv.

Я также проверил

`sudo python main.py '

, затем он возвращает

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

Я считаю синтаксической ошибки нет. Не знаю, почему это происходит.

0 голосов
/ 17 июня 2020

попробуйте использовать:

sudo python3 main.py

...