Python虚拟环境未列出已安装的软件包

时间:2019-01-28 20:07:37

标签: python anaconda virtualenv conda

我通过键入创建虚拟环境mdpenv

$ conda create --name mdpenv

我将其激活为

$ source /usr/local/anaconda3/bin/activate mdpenv

我尝试列出此环境中安装的所有软件包,我希望这些软件包与基本环境相同,但我什么也没得到:

(mdpenv) $ conda list
# packages in environment at ~/.conda/envs/mdpenv:
#
# Name                    Version                   Build  Channel

但是,我显然已经安装了许多软件包,例如:

(mdpenv) $ python
>>> import numpy
>>> import scipy
>>> import pandas

为什么我没有获得我的新虚拟环境mdpenv所暴露的软件包的列表?

2 个答案:

答案 0 :(得分:1)

Conda环境通常带有默认软件包。如果您想要一个干净的环境,请执行以下操作:

conda create --no-default-packages -n myenv python=3.6

这将创建一个没有默认程序包的干净环境。环境不是您的基础的克隆。如果您希望所有内容都基于您的环境,则应该克隆base。

conda create --name base --clone myenv

您可以通过编辑.condarc文件在你的home目录将自动创建.condarc创建一个新的环境时,改变默认包行为安装在你第一次运行:

conda config

配置遵循YAML语法。使用您选择的编辑器,导航到:

create_default_packages:
  - pip
  - ipython
  - numpy 
  ...

您可以删除或添加您希望被包括在默认环境下创建的软件包。

答案 1 :(得分:0)

在外壳中(在终端中)键入python时,它将在存储在名为PATH的环境变量中的目录中查找该文件。您可以通过输入echo $PATH来查看此变量的值。

激活conda环境(包括基本环境)时,将存储安装在环境中的可执行文件的目录添加到PATH变量中。因此,在激活基本环境后,您会看到类似

/path/to/anaconda/bin:/usr/local/bin:...

但是,当您激活环境时,conda会将基本环境留在PATH上,而只是将新环境添加到最前面,例如

/path/to/anaconda/envs/mdpenv/bin:/path/to/anaconda/bin:/usr/local/bin:...

现在,当您创建一个空环境时,conda根本不会安装任何软件包(因此,空的conda list输出)。但是,基本环境中的python仍然存在于您的PATH上,因此,当您键入python时,shell将找到安装在基本环境中的Python,并且该Python会加载所有基本环境中安装的软件包。

通过检查Python使用的可执行文件和Python导入包的路径来测试此行为很容易:

>>> import sys
>>> print(sys.executable)
/path/to/anaconda/bin/python
>>> print(sys.path)
['', '/path/to/anaconda/lib/python37.zip', ...]

如果将python安装到新环境中,则会发现您无法导入任何软件包(因为在该环境中没有安装Python以外的任何东西)