[英]Can't run python sanic on ec2
I tried a code bellow on ec2.(amazon linux2)我在 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)
It runs fine.它运行良好。
Bue when I changed a port number to 80 like bellow当我将端口号更改为 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)
System replys,系统回复,
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
So next I did所以接下来我做了
sudo python main.py
Then error message says,然后错误消息说,
File “main.py”, line 7
async def test(request):
^
SyntaxError: invalid syntax
I don't know what to do.我不知道该怎么办。 Give me some advise.给我一些建议。
My folder is like below我的文件夹如下所示
sanic/
├ bin/
├ includs/
├ lib/
├ lib64
├ main.py
└ pyvenv.cfg
try to use:尝试使用:
sudo python3 main.py须藤python3 main.py
Thankfully, I got a solution on my own.谢天谢地,我自己找到了解决方案。 It caused by a PATH error,since I used venv.它是由 PATH 错误引起的,因为我使用了 venv。
when I use当我使用
sudo python3 main.py
then sys.path is like然后 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']
There isn't a PATH that contains "sanic" or any module than I installed before. ['/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”或我之前安装的任何模块。
So I added所以我加了
import sys sys.path.append('/home/ec2-user/sanic/lib/python3.7/site-packages')
to main.py import sys sys.path.append('/home/ec2-user/sanic/lib/python3.7/site-packages')
到 main.py
then It runs fine.然后它运行良好。
So, when you use "sudo" on amazon linux2 it will get out from venv.因此,当您在 amazon linux2 上使用“sudo”时,它会从 venv 中退出。
I also checked我也查了
`sudo python main.py' `sudo python main.py'
then it returns然后它返回
File "main.py", line 15 async def heavy_task1(): ^ SyntaxError: invalid syntax
I believe there isn't any syntax error.我相信没有任何语法错误。 I don't know why it happens.我不知道为什么会这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.