关于virtualenv虚拟环境中python版本的坑

通过virtualenv创建了基于python3的虚拟环境,激活虚拟环境后发现执行程序时依然在用python2在解析,后折腾一番后发现原因是,虚拟环境中未pip install flask,导致执行程序时系统自动去加载系统默认的python2。折腾的经过如下:

通过如下两行命令分别创建基于python2和python3版本的两个虚拟环境:

virtualenv -p /usr/bin/python ~/virtualenv/one                    #python2

virtualenv -p /usr/local/python3/bin/python3 ~/virtualenv/two    #python3

分别激活两个虚拟环境,查看python版本对应没问题:

[root@localhost one]# source bin/activate
(one) [root@localhost one]# python -V
Python 2.7.5
(one) [root@localhost one]#
[root@localhost two]# source bin/activate
(two) [root@localhost two]# python -V
Python 3.6.4
(two) [root@localhost two]#

用flask框架的入门程序测试:

  1 
  2 from flask import Flask
  3 
  4 app = Flask(__name__)
  5 
  6 
  7 @app.route('/')
  8 def hello_world():
  9     return '这是首页'
 10 

在基于python3的虚拟环境two中启动程序,然后浏览器端访问后报错如下(编码有误,不支持中文):

报错信息

百度,python2的确默认不支持中文,若要支持中文,需要在代码前加上#coding=utf-8;但python3默认是“utf-8”编码,应该是支持中文的啊。难道解析程序的是python2???,另外网页端报错信息里有python2.7的字样,我更怀疑这是python2。为了证明这是python2而不是python3,通过两个版本对print打印语句的区别:

python2下执行print ('hhh','ggg')结果应该为:('hhh','ggg')

python3下执行print ('hhh','ggg')结果应该为: hhh ggg

验证,基于python3的虚拟环境two下输出依然为:('hhh','ggg'),这就证明这的确是python2

 

那么问题来了,为什么开始明明在基于python3的虚拟环境two中查看python版本时的确显示的是python3.6.4,但解析程序时会是python2呢??????????????????????????

后想了下会不会和flask有关,突然想到two虚拟环境下我好像没pip install flask,查看pip list如下:

(two) [root@localhost two]# pip list
Package      Version
------------ -------
click        6.7    
itsdangerous 0.24   
MarkupSafe   1.0    
pip          18.0   
setuptools   40.2.0 
Werkzeug     0.14.1 
wheel        0.31.1 
(two) [root@localhost two]# 

加载flask后重新启动程序不再报错:

(two) [root@localhost app]# pip list
Package      Version
------------ -------
click        6.7    
Flask        1.0.2  
itsdangerous 0.24   
Jinja2       2.10   
MarkupSafe   1.0    
pip          18.0   
setuptools   40.2.0 
Werkzeug     0.14.1 
wheel        0.31.1 
(two) [root@localhost app]# ./start 
 * 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: 155-900-164

网页端中文显示正常:

网页端中文显示正常

总结:使用virtualenv创建虚拟环境时,如果虚拟环境中未加载flask,那么即使你的虚拟环境是基于python3的,但执行flask框架程序时,系统会自行加载python2来解析程序!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值