当我使用virtualenv创建虚拟环境时,为什么项目要使用它?

时间:2019-09-17 10:44:12

标签: python virtualenv

在我的项目中,我使用virtualenv创建了ENV

(ENV) bora-MBP:testDemo01 ldl$ ls
ENV             db.sqlite3      manage.py       templates       test01          testDemo01

您看到我有一个活跃的项目虚拟环境。

在我的项目的一个python文件中:

import six

print(six.PY3)  # print True

我使用来检查我项目的python版本,那里显示它使用了Python3

但是我进入ENV/lib,只显示python2.7

(ENV) bora-MBP:testDemo01 ldl$ cd ENV/lib/
(ENV) bora-MBP:lib ldl$ ls
python2.7

没有python3,这是我的第一个问题。

我的第二个问题是,为什么我的项目将使用ENV虚拟环境?我可以在哪里查看配置?


EDIT-01

在我的第一个问题中: 我知道我现在在项目中使用python3,可以使用six.PY3进行检查或其他方式,但是为什么我创建虚拟环境,在目录下只有python2.7目录ENV/lib/

我的第二个问题:

我们知道我的项目将使用ENV环境来运行程序,但是为什么呢?我的项目是否有使用此环境的默认设置(dependenciespackages等)?是否有任何配置文件供我们检查(清楚地指出我的项目testDemo01将使用ENV作为运行环境)?

2 个答案:

答案 0 :(得分:2)

第一个问题:

请使用python --version在您的虚拟环境中检查python版本,以确保它是否为python 3。在命令行中使用whereis python,检查是否有多个python版本。

第二个问题:

要简化虚拟环境管理过程,请安装virtualenvwrapper pip install virtualenvwrapper-win。 然后,您可以通过“编辑系统环境变量”来检查和更改您的ENV目录。使用您的require路径更改或创建“ WORKON_HOME”变量。

根据您的EDIT-01:

  • 似乎您的计算机中安装了多个版本的python,而virtualenv使用的是python2.7。请使用virtualenv -p path_of_python3 envname用python3创建virtualenv。您可以在命令行中使用whereis python找到所有python的路径。
  • 您可以在virtualenv中使用pip freeze检查依赖性。

答案 1 :(得分:0)

第一个问题,在python2.7/下的ENV/lib/是由于创建virtualenv方法引起的,如果您这样创建ENV:

virtualenv -p python3 ./ENV

python3.x/下应该有ENV/lib/

第二个问题:

  

是否有任何配置文件供我们检查(清楚地指出我的项目testDemo01将使用ENV作为运行环境)?

出于源原因,您应该检查ENV/bin/active bash文件,在激活虚拟环境时,项目仍要使用该文件:

VIRTUAL_ENV="/Users/aircraft/Desktop/TestPython/Demo/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

# unset PYTHONHOME if set
if ! [ -z "${PYTHONHOME+_}" ] ; then
    _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
    unset PYTHONHOME
fi

if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
    _OLD_VIRTUAL_PS1="$PS1"
    if [ "x" != x ] ; then
        PS1="$PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
    fi
    export PS1
fi

您看到,执行active bash时,将导出VIRTUAL_ENV,并将其添加到PATH中,并取消设置PYTHONHOME(如果已设置)。这就是项目将使用virtualenv的原因。