所以问你使用的什么开发环境呀,Pycharm的话是有提示信息的:OSError: [Errno 98] Address already in use
。
我估计你的问题是重启服务器的时候没有把原来的进程结束,所以5000端口还在被原来的程序占用。
所以问你使用的什么开发环境呀,Pycharm的话是有提示信息的:OSError: [Errno 98] Address already in use
。
我估计你的问题是重启服务器的时候没有把原来的进程结束,所以5000端口还在被原来的程序占用。
抱歉,忘了说明。开发环境就是pycharm(windows平台),并没有报错。
我继续测试了一下,发现了新的问题。
端口你再检查下两个终端的程序是不是运行在一个端口(应该不可能)
你的项目文件夹应该有问题吧,你检查下虚拟环境呢?这样应该没有启动helloflask里面的虚拟环境
所以不知道是不是pycharm的bug,打算换个专业版pycharm试一下。
还是多谢你耐心恢复我的问题。
关于2. 我新建了一个 virtualenv+pip的虚拟环境,就没问题了。
不知道是pipenv的问题还是pycharm集成支持pipenv的问题。
你使用pipenv创建虚拟环境的操作有问题,如果要使用helloflask目录下的虚拟环境,应该在pycharm内将helloflask文件夹作为新项目打开,pycharm会根据文件夹内的pipfile自动启动虚拟环境;
但是你在helloflask文件夹外部自己创建了虚拟环境,可能会导致非预期的行为;而且你上传截图里面的命令执行时都没有启动虚拟环境,不一定是这些导致了你上面的问题,但建议还是按照书上的步骤使用实例程序吧
再次感谢
你误会了,我的意思是在我自己的项目里新建了一个文件夹test,以及test中文件app.py,然后cd到test仍然无法用flask run启动它,flask shell只能搜索到根目录下的instance
我把我自己项目的虚拟环境删掉重新建了一下,子目录下app.py的问题已经解决了。
但端口还是会出现占用不报错的问题,这个问题放一放再说吧,我把情况放在这,希望遇到同样问题的同学可以一同解决:
pycharm中可以启动两次app.py占用同一端口,没有端口占用报错,但只能访问第一次启动的app.py。
(pycharm版本2018.3.3community)
可以尝试去实时检测系统的端口监听情况,以及检查是否设置了端口复用
我的环境是linux系统和pycharm专业版,无法复现
朋友,为了不给阅读这个帖子的读者造成误导和困扰,请允许我指出你在这个帖子中所描述的问题大部分可能是因为:
pipenv
和python-dotenv
这两个第三方库时对它们可能缺乏了解。另外,因为你描述的问题我都没能复现,建议阅读别轻易声称自己遇到了bug。
pycharm 中可以启动两次app.py占用同一端口,没有端口占用报错,但只能访问第一次启动的app.py。
首先有两个结论:
flask run
是一样的效果。那什么情况下一个端口可以被多次监听呢?
简单描述,就是我们启动一个 Web 服务的时候,我们可以给这个 Web 服务设置一个参数 SO_REUSEADDR
,这个参数可以允许程序多次绑定同一端口,不设置这个参数就不能被多次重复监听(ps: 实际上远没有这么简单,但目前,我们可以这么理解。详情可以看这个回答。
在 Flask 中,它正好设置了这个参数,你可以看 werkzeug 库的这一行代码,而 Flask 是基于 Werkzeug 开发的一个 Web 框架)。
扩展:有童鞋可能会想 SO_REUSEADDR 这个参数有什么用呢?看起来只会给我添麻烦呀。如果你心里产生了这个疑问,恭喜你,你非常有潜力成为一个 相对 成功的程序员~
先说声抱歉。
用词不当,以后会多多注意。
再次感谢。
thanks soooooooo much.
另有个问题想请教下,
如果我想详细了解一下这个问题涉及到的内容,应该学那些知识?
(抱歉,专业并非sc,许多的东西想学也不知道到底该学什么)
从这位大佬引用的SO答案来看,主要涉及到了以下知识:
个人建议如果还在入门flask的阶段没必要在这种问题上深钻,因为涉及的知识面较广,且在正常情况下对程序不会产生影响,等你过了遍网络协议和操作系统基础后就很好理解了。
你好,我也遇到了这个问题。flask代码修改后网页无法更新。这是我的项目文件结构。我直接在命令行里运行的。
我在watchlist里安装了pipenv,也打开了虚拟环境。有人知道我的问题在哪里吗?非常感谢!
问题解决了。是因为浏览器缓存,后来在app.py中设置了时间就可以了。
from datetime import timedelta
app.config[‘SEND_FILE_MAX_AGE_DEFAULT’] = timedelta(seconds=1)
是进程的问题
C:\Users\MACHENIKE>netstat -aon|findstr 5000
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 563112
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 561588
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 560316
TCP 127.0.0.1:5000 0.0.0.0:0 LISTENING 551920
就是页面刷新之后hello word都没有方法修改,这是我的进程,解除之后就没有主楼出现的问题了