conda 4.2.13 MacOSX 10.12.1

我试图将包从pip安装到使用anaconda创建的新环境(虚拟)。在水蟒的文件里说这是完全没问题的。它的实现方式与virtualenv相同。

激活你想要放置程序的环境,然后pip安装程序…

我在《Ananconda》中创造了一个空旷的环境:

conda create -n shrink_venv

激活:

source activate shrink_venv

然后,我可以在终端中看到我正在我的环境(shrink_venv)中工作。当我尝试使用pip安装一个包时,问题出现了:

(shrink_venv): pip install Pillow

Requirement already satisfied (use --upgrade to upgrade): Pillow in /Library/Python/2.7/site-packages

因此,我可以看到它认为从系统范围的包中满足了需求。所以看起来环境没有正常工作,绝对不像文档中说的那样。我做错什么了吗?

只是一个说明,我知道你可以使用conda安装包,但我从anaconda的枕头有一个问题,所以我想从pip得到它,因为医生说这是好的。

输出-a pip:

/usr/local/bin/pip
/Users/my_user/anaconda/bin/pip

**更新** 我发现这是一个很常见的问题。我发现conda env不能很好地与PYTHONPATH一起使用。即使在使用conda环境时,系统似乎总是在PYTHONPATH位置中查找。现在,当使用conda环境时,我总是运行未设置的PYTHONPATH,它工作得更好。我用的是mac电脑。


当前回答

这取决于您如何配置PATH环境变量。 当您的shell解析对pip的调用时,它将找到哪一个bin ?

(test)$ whereis pip
pip: /home/borja/anaconda3/envs/test/bin/pip /home/borja/anaconda3/bin/pip

确保anaconda安装中的bin文件夹位于/usr/lib之前(取决于您如何安装pip)。举个例子:

(test) borja@xxxx:~$ pip install djangorestframework
....
Successfully installed asgiref-3.2.3 django-3.0.3 djangorestframework-3.11.0 pytz-2019.3 sqlparse-0.3.1

(test) borja@xxxx:~$ conda list | grep django
django                    3.0.3                    pypi_0    pypi
djangorestframework       3.11.0                   pypi_0    pypi

我们可以看到djangorestframework安装在我的测试环境中,但如果我检查我的基础:

(base) borja@xxxx:~$ conda list | grep django

它是空的。

就我个人而言,我喜欢使用.pam_environment来处理我所有的PATH配置,这里有一个例子:

(base) borja@xxxx:~$ cat .pam_environment
PATH DEFAULT=/home/@{PAM_USER}/anaconda3/bin:${PATH}

多一个注释。安装pip的方式可能会产生问题:

你应该使用:conda install pip——>使用pip安装的新包将被添加到conda列表。 你不能使用:sudo apt install python3-pip——>新的包不会被添加到conda列表(因此不受conda管理),但你仍然可以使用它们(冲突的可能性)。

其他回答

对于其他遇到这种情况的人,我发现这是最直接的解决方案:

执行conda create -n venv_name和conda activate venv_name命令,其中venv_name是虚拟环境的名称。 执行conda install pip。这将把pip安装到venv目录。 找到您的anaconda目录,并找到实际的venv文件夹。它应该是/anaconda/envs/venv_name/。 执行/anaconda/envs/venv_name/bin/pip Install package_name命令安装新包。

现在应该成功地使用虚拟环境的pip安装包了!

如果你使用的是windows操作系统,打开Anaconda提示并输入activate yourenvname

如果你使用的是mac或Linux操作系统,打开终端,输入source activate yourenvname

Yourenvname这里是您想要在其中安装PIP包的理想环境

输入上述命令后,您必须看到控制台输出中的环境名称从base更改为您键入的环境yourenvname(这意味着您现在处于所需的环境上下文中)

然后你所需要做的就是正常的pip安装命令,例如pip install yourpackage

通过这样做,pip包将安装在Conda环境中

如果在创建conda环境时没有添加pip

conda create -n env_name pip

也没有在环境中安装PIP

source activate env_name
conda install pip

那么您得到的唯一PIP就是系统PIP,它将全局安装包。

正如您在这个问题中所看到的,即使您执行了上面提到的任何一个过程,pip在conda环境中的行为仍然是未定义的。

为了确保使用安装在conda环境中的pip,而不必键入冗长的/home/username/anaconda/envs/env_name/bin/pip,我写了一个shell函数:

# Using pip to install packages inside conda environments.
cpip() {
    ERROR_MSG="Not in a conda environment."
    ERROR_MSG="$ERROR_MSG\nUse \`source activate ENV\`"
    ERROR_MSG="$ERROR_MSG to enter a conda environment."

    [ -z "$CONDA_DEFAULT_ENV" ] && echo "$ERROR_MSG" && return 1

    ERROR_MSG='Pip not installed in current conda environment.'
    ERROR_MSG="$ERROR_MSG\nUse \`conda install pip\`"
    ERROR_MSG="$ERROR_MSG to install pip in current conda environment."

    [ -e "$CONDA_PREFIX/bin/pip" ] || (echo "$ERROR_MSG" && return 2)

    PIP="$CONDA_PREFIX/bin/pip"
    "$PIP" "$@"
}

希望这对你有所帮助。

你所要做的就是打开水蟒提示并输入

pip install package-name

它将自动安装到anaconda环境而无需使用

conda install package-name

由于一些conda包可能在以后的时间里缺乏支持,因此需要使用pip安装,这是一种方法

如果你在anaconda中安装了pip,你可以在jupyter笔记本或链接到anaconda的python shell中运行以下命令

pip.main(['install', 'package-name'])

使用pip.__version__检查pip的版本。如果是10.x版本。X或以上版本,然后用这行代码安装python包

subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'package-name'])

在你的jupyter笔记本中,你可以通过pip在单元格中安装python包;

!pip install package-name

或者你也可以使用与anaconda相关的python版本

!python3.6 -m pip install package-name

这取决于您如何配置PATH环境变量。 当您的shell解析对pip的调用时,它将找到哪一个bin ?

(test)$ whereis pip
pip: /home/borja/anaconda3/envs/test/bin/pip /home/borja/anaconda3/bin/pip

确保anaconda安装中的bin文件夹位于/usr/lib之前(取决于您如何安装pip)。举个例子:

(test) borja@xxxx:~$ pip install djangorestframework
....
Successfully installed asgiref-3.2.3 django-3.0.3 djangorestframework-3.11.0 pytz-2019.3 sqlparse-0.3.1

(test) borja@xxxx:~$ conda list | grep django
django                    3.0.3                    pypi_0    pypi
djangorestframework       3.11.0                   pypi_0    pypi

我们可以看到djangorestframework安装在我的测试环境中,但如果我检查我的基础:

(base) borja@xxxx:~$ conda list | grep django

它是空的。

就我个人而言,我喜欢使用.pam_environment来处理我所有的PATH配置,这里有一个例子:

(base) borja@xxxx:~$ cat .pam_environment
PATH DEFAULT=/home/@{PAM_USER}/anaconda3/bin:${PATH}

多一个注释。安装pip的方式可能会产生问题:

你应该使用:conda install pip——>使用pip安装的新包将被添加到conda列表。 你不能使用:sudo apt install python3-pip——>新的包不会被添加到conda列表(因此不受conda管理),但你仍然可以使用它们(冲突的可能性)。