首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在ec2上运行python sanic

无法在ec2上运行python sanic
EN

Stack Overflow用户
提问于 2020-06-16 16:23:38
回答 2查看 422关注 0票数 0

我在ec2上尝试了一个代码。(亚马逊linux2)

代码语言:javascript
复制
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时,如下所示

代码语言:javascript
复制
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)

系统回复,

代码语言:javascript
复制
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

所以下一步我做了

代码语言:javascript
复制
sudo python main.py

然后错误消息说,

代码语言:javascript
复制
File “main.py”, line 7
  async def test(request):
    ^
SyntaxError: invalid syntax

该怎么办呢。给我一些建议。

我的文件夹如下所示

代码语言:javascript
复制
sanic/
 ├ bin/
 ├ includs/
 ├ lib/
 ├ lib64
 ├ main.py 
 └ pyvenv.cfg
EN

回答 2

Stack Overflow用户

发布于 2020-06-17 14:20:11

尝试使用:

sudo python3 main.py

票数 0
EN

Stack Overflow用户

发布于 2020-06-17 15:19:05

谢天谢地,我自己找到了一个解决方案。它是由路径错误引起的,因为我使用的是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']没有包含"sanic“或我之前安装的任何模块的路径。

所以我加了一个

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

然后它运行得很好。

所以,当你在亚马逊linux2上使用"sudo“时,它会从venv中消失。

我也查过了

` `sudo python main.py‘

然后它返回

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62404106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档