1. 程式人生 > >關於virtualenv虛擬環境中python版本的坑

關於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版本對應沒問題:

[[email protected] one]# source bin/activate
(one) [[email protected] one]# python -V
Python 2.7.5
(one) [[email protected] one]#
[[email protected] two]# source bin/activate
(two) [[email protected] two]# python -V
Python 3.6.4
(two) [[email protected]
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) [[email protected] 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) [[email protected] two]# 

載入flask後重新啟動程式不再報錯:

(two) [[email protected] 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) [[email protected] 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來解析程式!!!

相關推薦

關於virtualenv虛擬環境python版本

通過virtualenv建立了基於python3的虛擬環境,啟用虛擬環境後發現執行程式時依然在用python2在解析,後折騰一番後發現原因是,虛擬環境中未pip install flask,導致執行程式時系統自動去載入系統預設的python2。折騰的經過如下: 通過如下兩行

python如何配置virtualenv虛擬環境,啟動兩個django環境

tps http virtual all pac sta virt 指向 第三方 1.安裝virtualenv pip3 install virtualenvpip install -i https://pypi.tuna.tsinghua.edu.cn/simple

windows下虛擬環境建立Django專案(建立虛擬環境,安裝virtualenv,安裝Django,建立專案)

一、建立虛擬環境   pip install virtualenv1 要使用Django,首先要建立一個虛擬工作環境。我們先為專案建立一個資料夾learn,在資料夾中開啟命令列(shift+右擊),來建立另一個虛擬環境。   如果使用的是python 3,可使

Fedora升級後Python虛擬環境的pip報錯

今日Fedora從28升級到29後,進入Python的虛擬目錄後,本來想使用pip更新下包,結果報錯了,如下: Traceback (most recent call last): File "/home/kowalski/Projects/rifm/venv/bin/pip", line 7, in

開機shell啟動虛擬環境python程式碼

上一篇文章是開機自啟動shell指令碼。網上很多例子。 我的程式碼tt.sh sudo -i . /root/.virtualenvs/cv/bin/activate python3 /home/pi/t2.py 1、進入root使用者 2、啟動虛擬環境,使用絕對路徑。 3、執

虛擬環境解決python版本並行

一.安裝篇 1.本文作業系統為CentOS7 依賴包(安裝時可能還存在其他依賴包,結合報錯進行安裝) [[email protected] home]# yum install make build-essential libssl-dev zlib1g-dev libbz2-dev libr

virtualenv 虛擬環境 (python)

What's the difference between “virtualenv” and “-m venv” in creating Virtual environments(Python) venv is a package shipped directly with python 3 (N

python virtualenv虛擬環境介紹

最近折騰tensorflow的編譯安裝,重新用virtualenv, 發現生疏了,就簡單記錄下吧在開發Python應用程式的時候,系統安裝的Python3只有一個版本:3.4。所有第三方的包都會被pip安裝到Python3的site-packages目錄下。如果我們要同時開發

Ubuntu系統下無法使用pip將安裝包安裝到Python虛擬環境

- Background All I want to do is to Install and deploy Django into Python virtual environment to develope a web application, which is proceed follow

在Jupyter notebook使用特定虛擬環境python的kernel

模塊 library 選項 min 效果 .json file note port 在虛擬環境tf中安裝完tensorflow後,在虛擬環境tf打開的jupyter裏發現只有一個kernel-python3,新建一個文件, import tensorflow as

python虛擬環境安裝Scrapy

為了保證python的乾淨,今天嘗試在虛擬機器中安裝Scrapy,BUG多多,終於安裝成功了,分享出來, 本機: python2.7.12 win7 64位 python安裝好以後使用pip安裝虛擬環

Mac系統安裝virtualenv虛擬環境

總體來說有三個步驟.1.建立工作目錄.python3 -m venv lanyue_env注意:2.安裝virtualenv.pip3 install --user virtualenv2.啟用虛擬環境.source lanyue_env/bin/activate3.如果要停

虛擬環境的安裝包如何匯出,如何安裝到新的虛擬環境virtualenv

在我們使用Python開發中,一般會使用到virtualenv來做環境的隔離,防止汙染本地的Python環境在我們有多個虛擬環境時候,如何複製一個虛擬環境的包到另一個環境中去呢?1.到原始的virtua

ubuntu下使用Anaconda應用:建立虛擬環境實現python不同版本切換、科學計算工具包安裝

Anaconda的安裝 Anaconda的下載頁參見官網下載,Linux、Mac、Windows均支援。 安裝時,會發現有兩個不同版本的Anaconda,分別對應Python 2.7和Python 3.5,兩個版本其實除了這點區別外其他都一樣。後面我們會看到,安裝哪個版本並不本質,因為通過環境管理,我們可以

Ubuntu16.04下安裝Python擴充套件包-scipy,numpy,matplotlib(普通環境virtualenv虛擬環境

1、普通環境安裝擴充套件 sudo apt-get install python-scipy sudo apt-get install python-numpy sudo apt-get install python-matplotlib 2、在Python虛擬環境中安

邊做邊學Python Flask Web開發(2)-- 使用VirtualEnv虛擬環境

使用VirtualEnv虛擬環境 概述 說VirtualEnv是Python的一大神器不足為過,如果你在生活中也有那麼一點點的“潔癖”,相信你會喜歡上這個東西。 我們知道使用Python的過程中會安裝各種庫、包,甚至有時候還需要Python2和Pyth

pyenv虛擬環境管理python版本和軟體庫

可能大家在日常工作中會遇到這麼個問題,現在基本的linux系統都是自帶老版本的python2.7.x版本,我又不想用老版本,但直接升級可能會出問題,或是依賴老版本的程式就執行不了,有沒辦法能安裝3.x新版本的? 答案是有的,請使用pyenv,可以支援管理多個python版本,任意使用。 其實官方於2019年底

配置virtualenv虛擬環境

clas pre highlight .sh 添加 per 指定 不同 virtual virtualenvwrapper是virtualenv的擴展工具,可以方便的創建、刪除、復制、切換不同的虛擬環境,不管是開發還是生產環境都盡量用虛擬環境來做 1.安裝virtual

淺談pipreqs組件(自動生成需要導入的模塊信息) 和 virtualenv(虛擬環境)

部署 信息 進行 方式 情況 vat sha bsp 路徑 一、pipreqs組件 pipreqs的作用 一起開發項目的時候總是要搭建環境和部署環境的,這個時候必須得有個python第三方包的list,一般都叫做requirements.txt。 如果一個項目使用時vi

開啟虛擬機器顯示“次虛擬環境的長模式將被禁用”

近日,給一新機安裝VMware虛擬機器,在開啟虛擬機器的時候出現下圖的提示,無法正常開啟: 出現上圖的原因,主要是bios介面沒開啟對應的許可權,需要進入該模式下開啟,各電腦進入bios命令不一,有點F2,F1,F12   如下圖,將兩者的許可權都設定為enable狀態儲