在 Windows 上启动 Flask 项目时,工作目录有 UTF-8 编码的 .env 文件,里面配置的环境变量在 Python2 中识别为 Unicode 类型,导致下述错误:

 * Serving Flask app "bootstrap" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
Traceback (most recent call last):
File "bootstrap.py", line 40, in <module>
app.run(host=str(settings.DEV_HOST), port=settings.DEV_PORT)
File "D:\Python27\lib\site-packages\flask\app.py", line 943, in run
run_simple(host, port, self, **options)
File "D:\Python27\lib\site-packages\werkzeug\serving.py", line 812, in run_simple
reloader_type)
File "D:\Python27\lib\site-packages\werkzeug\_reloader.py", line 275, in run_with_reloader
sys.exit(reloader.restart_with_reloader())
File "D:\Python27\lib\site-packages\werkzeug\_reloader.py", line 132, in restart_with_reloader
close_fds=False)
File "D:\Python27\lib\subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "D:\Python27\lib\subprocess.py", line 394, in __init__
errread, errwrite)
File "D:\Python27\lib\subprocess.py", line 644, in _execute_child
startupinfo)
TypeError: environment can only contain strings

遇到这种情况,只需对 werkzeug 项目做个小的修改即可。Diff 文件如下所示:

diff --git a/werkzeug/_reloader.backup.py b/werkzeug/_reloader.py
# index 0d23dba..2698040 100644
# --- a/_reloader.backup.py
# +++ b/_reloader.py
# @@ -117,16 +117,20 @@ class ReloaderLoop(object):
# while 1:
# _log('info', ' * Restarting with %s' % self.name)
# args = _get_args_for_reloading()
# - new_environ = os.environ.copy()
# - new_environ['WERKZEUG_RUN_MAIN'] = 'true'
# + old_environ = os.environ.copy()
# + new_environ = {
# + 'WERKZEUG_RUN_MAIN': 'true'
# + }
#
# # a weird bug on windows. sometimes unicode strings end up in the
# # environment and subprocess.call does not like this, encode them
# # to latin1 and continue.
# if os.name == 'nt' and PY2:
# - for key, value in iteritems(new_environ):
# + for key, value in iteritems(old_environ):
# if isinstance(value, text_type):
# - new_environ[key] = value.encode('iso-8859-1')
# + new_environ[key.encode('iso-8859-1')] = value.encode('iso-8859-1')
# + else:
# + new_environ[key] = value
#
# exit_code = subprocess.call(args, env=new_environ,
# close_fds=False)

  

解决 Flask 项目无法用 .env 文件中解析的参数设置环境变量的错误的更多相关文章

  1. 用WIN7系统IIS的提示:数据库连接出错,请检查Conn.asp文件中的数据库参数设置

    我用科讯的从4.0开始,去年开始很少用科讯做新站了,今天拿来做一下,结果悲剧了,数据库路径老是不对,百度一番又一番的,,最后终于给度娘解决了.分享出来给遇到同样的问题的人. 用WIN7系统IIS的注意 ...

  2. linux环境变量设置 以及 source命令 Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程 Linux 设置环境变量

    定制环境变量  环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell.对于Linux来说一般是bash,但也可以重新设定或切换到其它的Shell.环境变量文件:/etc/profil ...

  3. Linux中使用export命令设置环境变量

    Linux export 命令 2011-08-31 22:36:39|  分类: 命令总结|举报|字号 订阅     功能说明:设置或显示环境变量. ######################## ...

  4. 00006 - Linux中使用export命令设置环境变量

    功能说明:设置或显示环境变量. #################################################################################### ...

  5. 关于Lumen / Laravel .env 文件中的环境变量是如何生效的

    .env 文件包含默认环境变量,我们还可自定义其他任何有效的变量,并可通过  调用 env() 或 $_SERVER 或 $_ENV  来获取该变量.那么env()是如何加载到这些变量的呢?在Lume ...

  6. htaccess文件中RewriteRule 规则参数介绍

    .htaccess 文件 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d Rew ...

  7. IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    问题描述:在使用IDEA对JSTL进行测试时出现error:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] ...

  8. Maven项目中,系统设置的CLASSPATH环境变量问题

    在Maven项目中,系统的CLASSPATH环境变量失效了吗?在用Maven开发登录网站时,servlet-api出现错误,jdbc也出现错误,都是ClassNotFoundException,但这两 ...

  9. 读取xml文件中的配置参数实例_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 paras.xml文件 <?xml version="1.0" encoding=" ...

随机推荐

  1. Echarts中X轴坐标太密集,分段显示

    在axisLabel中设置刻度间隔interval,再加上强制显示最大值showMaxLabel和最小值showMinLabel axisLabel: {//X轴文字 interval: day == ...

  2. unity的安装,配置,及问题

    下载unity 在官网下载unity unity有三个版本,个人版免费,pro和专业版收费. 个人版 在导出exe文件时不能去掉水印片头.其他版本可以. 地址[https://store.unity. ...

  3. @Autowired报错原因分析和4种解决方案!

    上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 IDEA 报错,但程序却能正常的执行,那这其中的原因又是为何? ​ 报错原因分析 报错的原因 ...

  4. 7. Qt中与垃圾回收机制相关的替代方法(未完

    容器支持引用计数和写时复制 父对象和子对象 QPointer.QSharedPointer.QWeakReference 对象子类化 栈对象

  5. 12-2 MySQL数据库备份(分表)

    #!/bin/bash source /etc/profile DATE="$(date +%F_%H-%M-%S)" DB_IP="172.16.1.122" ...

  6. 聊一聊我在 B 站自学 Java 的经历吧

    Hey guys ,这里是 cxuan,欢迎你收看我最新一期的文章. 这是一篇鸽了很久的文章...... 事情还要从上回说起...... 我爱 B 站! 这篇文章我汇总了 B 站上计算机基础(操作系统 ...

  7. Linux指令手册 (一)

    指令格式 指令主体 [选项] [操作对象] 一个完整的指令是由"指令主体"."选项"和"操作对象"组成的,其中指令主体只能有一个,选项有零个 ...

  8. 编译aarch64 Linux内核并基于qemu运行

    核心流程 首先,本文主要讲述如何编译Linux内核并在qemu虚拟机上运行.这里针对的架构是aarch64. 本文的实验平台是Ubuntu 16.04. 为了达成目标,我们需要有qemu.buildr ...

  9. SpringBoot | 1.1 SpringBoot简介

    前言 本博客仅为记录与总结SpringBoot的学习笔记,资料来源: 书籍<深入浅出SpringBoot>第三版 B站尚硅谷<雷丰阳2021版SpringBoot2零基础入门> ...

  10. 锁分析 Lock

    锁分析 Lock NonReentrantLock ReadLock 共享锁 ReentrantLock 重入锁 排他锁 sync.lock 返回值为void,表示如无异常发生都认为锁获取成功 Fai ...