环境: windows,pycharm 专业版,python虚拟环境venv
更新: 可以看看我新写的,没报错也收不到邮件的另一个原因:TESTING变量大坑
背景:照着书上一步一步来,一直到在flask shell 发送邮件测试环境,一直很成功。但是在代码中去集成发邮件的功能,却一直收不到邮件。
在网上搜索了一番无果(主要是这个邮件收不到的问题太宽泛了),本着重启能解决99%问题的真理,我把pycharm整个关了重启一遍。
谁知道连在flask shell测试都发不出去邮件了,打印app.config[‘MAIL_USERNAME’] 显示为None,原来是环境变量没有传进来。可是明明用set MAIL_USERNAME = ×××命令在pycharm的terminal窗口设置了(我知道关闭窗口环境变量会失效,所以又设置了一遍),用set命令查看所有环境变量,MAIL_USERNAME也在里面,怎么到flask shell里面就读不到了呢?重启后程序不能复现,这是个很严重的问题!
解决思路: 想起来昨天写的文章末尾一个参考博客: 参考1 的末尾说
“在windows下,在PyCharm的Terminal中设置环境变量,不行!!后来,在cmd命令下设置,关闭当前窗口后,就会失效,最关键的问题是在pycharm中无法获取”
昨天才学到flask shell测试邮件,跟着书上实践,在pycharm的terminal设置环境变量就可以成功在flask shell 中读到,就没想这么多。今天在程序中集成失败,突然就想到了这里,再加上重启pycharm后,即使又在terminal设置了环境变量,在flask shell 竟然读不到!?(至于昨天怎么成功读到的,都是玄学)对,就是pycharm无法获取环境变量的问题!
于是按照他的第二种方法,在pycharm的任务栏顶部Run -> Edit Configurations -> Environment variables 添加MAIL_USERNAME、MAIL_PASSWORD,FLAKSY_ADMIN环境变量
。重启pycharm,打开terminal,启动flask shell,打印app.config[‘MAIL_USERNAME’] 竟然还是None!!!
挠破脑袋,怎么照着别人做还是不行?
参考2
原因:terminal是pycharm集成的一个tools,那么他就需要设置一个应用来运行,就跟pycharm一样,他也是一个工具,需要python来编译执行。
虽然没针对我的问题,但是给了我一些启示:是不是要为terminal单独设置环境变量?
参考3 的最后
参考链接里在pycharm中添加环境变量,而不是在系统中添加,这种方法我这不行,还是获取不到
对,我跟他一样,我也获取不到,于是去翻他结尾附上的参考链接:
参考4
于是乎我们得寻找在pycharm中定义环境变量的方法:
- Preference -> Build, Execution, Deployment -> Console -> Python Console 下最上面可设置环境变量
- 任务栏顶部的 Run -> Edit Configurations 里面有个 Environment Variables
我突然想到,pycharm这么多地方可以设置环境变量,是不是这些地方各自管各自的环境变量,不会互通。在哪里运行就需要设置哪里的环境变量
比如,设置terminal的环境变量,只在terminal中生效(因为在terminal启动flask shell,所以flask shell也可以读到), 而在Python Console读不到。想要在 Python Console读到,就去设置 Python Console的环境变量。同理,上述两个地方设置的环境变量,在代码程序中读不到,需要去任务栏顶部`Run -> Edit Configurations -> Environment variables 这里设置。下面逐步验证:
设置terminal中的环境变量
点击右下方的apply,打开terminal内flask shell ,读取成功
且用flask shell 成功发送邮件!
为启动程序设置:任务栏顶部Run -> Edit Configurations -> Environment variables
点击右下方的apply,运行代码,表单接收到新的名字,成功收到邮件!!!
总结:花了一上午的时间,弄清楚了pycharm这个坑。
如果你前面稀里糊涂、歪打正着混过去了,后面的学习中再碰到这种坑,还是会绊住你!玄学,不能复现的指令不容小觑!