学习Flask开发的时候,因为主机是Windows环境,而日常跑服务的是Linux环境,所以需要通过配置pycharm使之使用远端的虚拟环境。

创建虚拟机Flask环境

此处在网上可以找到很多写好的教程,不需要我再次叠床架屋了。

配置Pycharm环境

打开 Pycharm 的 setting 对话框,按照如下配置

setting_start

依次输入真实远端信息之后,点击下一步,直到出现下方对话框

setting_end

依次修改将要使用的解释器和主机与远端需要保持同步的目录;

setting_flask

如图设置之后运行,Run出现如下结果

FLASK_APP = app
FLASK_ENV = development
FLASK_DEBUG = 1
In folder D:/MYcode/flk
ssh://root@192.168.116.21:22/home/imoyao/envs/flk/bin/python -u -m flask run --host=0.0.0.0
* Serving Flask app "app" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 820-491-228

之后在本机访问虚拟机ip,比如本例中的192.168.116.21:5000,即可进入app首页。

注意问题

在配置好上述选项之后,运行可能会提示 NoAppException: Could not import "app".。这个问题暂时不知道是什么原因引起,可能是Pycharm识别路径有误导致,暂时没有找到很好的解决办法。大家可以参考下图尝试配置(递归手动设置目录,可能有用)。

can't_import_app

更新

今天突然出现不能访问的问题,使用netstat nap|grep 5000(flask 运行端口)查看端口状态:

tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      8195/python

说明端口正常开放,怀疑是防火墙的原因
systemctl stop firewalld

关闭之后可以正常访问,确认是其问题。
firewall-cmd --zone=public --add-port=5000/tcp --permanent
Warning: ALREADY_ENABLED: 5000:tcp
success

重启防火墙之后可以正常访问:
[root@172 ~]# systemctl stop firewalld

[root@172 ~]# firewall-cmd --reload
FirewallD is not running

[root@172 ~]# firewall-cmd --state
running

参考链接