使用 Pip 将软件包安装到 Anaconda 环境

Posted

技术标签:

【中文标题】使用 Pip 将软件包安装到 Anaconda 环境【英文标题】:Using Pip to install packages to Anaconda Environment 【发布时间】:2017-04-24 22:19:16 【问题描述】:

康达 4.2.13 MacOSX 10.12.1

我正在尝试将软件包从 pip 安装到使用 anaconda 创建的全新环境(虚拟)中。 In the Anaconda docs 它说这很好。它的完成方式与 virtualenv 相同。

激活你要放程序的环境,然后pip install一个程序...

我在 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 install 来获取软件包,但我遇到了 anaconda 的 Pillow 问题,所以我想从 pip 获取它,因为文档说这很好。

which -a pip 的输出:

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

** 更新 ** 我看到这是一个很常见的问题。我发现 conda env 不能很好地与 PYTHONPATH 配合使用。即使您使用 conda 环境,系统似乎总是在 PYTHONPATH 位置中查找。现在,我在使用 conda 环境时总是运行unset PYTHONPATH,而且效果更好。我在 Mac 上。

【问题讨论】:

你试过conda install pip吗? 您能否将which -a pip 的输出添加到您的问题中? 您是否设置了PYTHONPATH 环境变量? 有类似的问题。明确使用属于 Anaconda 的 pip 似乎对我有用。 使用 pip 和 conda 安装东西真的安全吗?我认为您可能会遇到问题,例如不知道要修复哪个版本的卸载... 【参考方案1】:

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

    运行conda create -n venv_nameconda 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 成功安装软件包!

【讨论】:

bin 文件夹的路径是否已更改?我不再在 venv_name 文件夹中看到它? 没有“bin”文件夹,因此上述步骤有所帮助。我要添加的一件事是运行“which pip”有助于确定哪个“pip”实际上正在安装包,而“pip freeze”给出了在环境中安装的包列表 我有这样的情况,即使我的源被激活,我的安装也没有在环境中发生。它们安装在默认的 python 位置。 这个答案主要是:从你的 conda env 运行pip(无论它是否是环境),并使用 conda 文件夹中的pip 可执行文件安装你想要的包(我的情况:AppData\Local\Continuum\anaconda3\Scripts) 当我在该环境中运行pip 时,是否有办法让与当前 conda 环境关联的 pip 无缝运行? (而不是按照步骤 4 的要求指示完整路径)。【参考方案2】:

您所要做的就是打开 Anaconda Prompt 并输入

pip install package-name

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

conda install package-name

由于某些 conda 包可能缺乏超时支持,因此需要使用 pip 安装,这是一种方法

如果你在 anaconda 中安装了 pip,你可以在 jupyter notebook 或链接到 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 notebook 中,你可以通过这种方式在一个单元格中通过 pip 安装 python 包;

!pip install package-name

或者您可以使用与 anaconda 关联的 python 版本

!python3.6 -m pip install package-name

【讨论】:

你如何“打开 Anaconda 提示符” 在 Windows 上,您必须使用任务栏上的搜索图标或输入搜索“anaconda prompt”并打开 @sambeth 在 Mac 上? 我认为关键是运行你的 anaconda 的 pip,它位于你的 anaconda 全局或特定环境下。 这个答案不正确。问题的重点在于,有时它不会安装到环境中。它在全球范围内安装。为防止这种情况,您需要先在环境中运行 conda install pip 以确保您使用的是本地版本的 pip。【参考方案3】:

我通过以下方式解决了这个问题:

如果你有一个非 conda pip 作为你的默认 pip 但 conda python 是你的默认 python(如下)

>which -a pip
/home/<user>/.local/bin/pip   
/home/<user>/.conda/envs/newenv/bin/pip
/usr/bin/pip

>which -a python
/home/<user>/.conda/envs/newenv/bin/python
/usr/bin/python

然后,而不是仅仅调用 pip install &lt;package&gt;,您可以将模块标志-m与python一起使用,以便它使用anaconda python进行安装

python -m pip install <package>

这会将包安装到 anaconda 库目录而不是与(非 anaconda)pip 关联的库目录

编辑: 这样做的原因如下: 命令pip 引用了一个特定的pip 文件/快捷方式(which -a pip 告诉你是哪一个)。同样,命令python 引用了一个特定的python 文件(which -a python 告诉你是哪一个)。由于某种原因,这两个命令可能会变得不同步,因此您的“默认”pip 与默认 python 位于不同的文件夹中,因此与不同版本的 python 相关联。

相比之下,python -m pip 构造不使用pip 命令指向的快捷方式。相反,它要求 python 找到 its 版本的 pip 并使用该版本来安装包。

【讨论】:

这应该是答案。在 Windows 上完美运行。 当然,这应该是答案。其他解决方案不起作用,而这个更优雅。 是的,这是最干净、最有效的答案。在 Ubuntu 上工作。 @taiyodayo:这不是问题所在。将非 conda pip 设置为默认值似乎是很多人(包括我自己)都遇到过的情况。上面的答案提供了一种在特定情况下解决问题中提出的问题的方法。 很高兴我遇到了这个解决方案。【参考方案4】:

这对我有用(参考图片链接)

    打开 Anaconda 在主页下方的左侧窗格中选择环境 就在您选择的位置右侧和“搜索环境”栏下方,您应该会看到 base(root)。点击它 应该会出现一个指向右侧的三角形,单击它并选择“打开终端” 在此处使用常规的 pip install 命令。无需指向环境/路径

如果您碰巧已经满足要求,可以找到您的软件包正在下载到的文件夹以供将来参考。如果您在终端中向上滚动,您可以看到它。它应该是这样的:要求已经满足,然后是路径

[]

【讨论】:

【参考方案5】:

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

conda create -n env_name pip

也没有在环境中安装pip

source activate env_name
conda install pip

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

正如您在 issue 中看到的那样,即使您执行了上述任何一个过程,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" "$@"

希望对你有帮助。

【讨论】:

"如果你在创建conda环境的时候没有添加pip,也没有在环境中安装pip,那么你得到的唯一pip就是系统pip,它会全局安装包。"当您让 Pip 全局安装任何东西时,Pip 可能会破坏您的基本 conda 环境。只是不要这样做。请参阅anaconda.com/blog/using-pip-in-a-conda-environment 了解更多信息。【参考方案6】:

python -m pip install Pillow

将使用通过

激活的当前 Python 的 pip

source activate shrink_venv

【讨论】:

【参考方案7】:

对于那些希望使用 pip 在 conda 中安装少量软件包的人,

sudo $(which pip) install <instert_package_name>

为我工作。

说明

无论如何,对我来说,which pip 似乎对于找到你所在位置的 conda env pip 路径非常可靠。但是,当使用sudo 时,这似乎会重定向路径或以其他方式破坏它。

使用$(which pip) 独立于sudo 或任何命令执行此操作,类似于在Linux 中运行/home/&lt;username&gt;/(mini)conda(3)/envs/&lt;env_name&gt;/pip。这是因为$() 是单独运行的,并且文本输出添加到了外部命令中。

【讨论】:

【参考方案8】:

以上所有答案主要基于virtualenv的使用。我刚刚安装了 anaconda3 并且没有安装任何 virtualenv。因此,我找到了一个更好的替代方案,而无需考虑创建 virtualenv。

如果你在 linux 上安装了很多 pip 和 python 版本,那么首先运行下面的命令来列出所有安装的 pip 路径。

点在哪里

你会得到这样的输出。

pip: /usr/bin/pip /home/prabhakar/anaconda3/bin/pip /usr/share/man/man1/pip.1.gz

复制您要用于安装软件包的 pip 路径,并在以下命令中用 sudo 替换 /home/prabhakar/anaconda3/bin/pip 后粘贴。

须藤/home/prabhakar/anaconda3/bin/pip安装&lt;package-name&gt;

这对我来说效果很好。安装有问题,欢迎评论。

【讨论】:

【参考方案9】:

如果您使用的是 Windows 操作系统,请打开 Anaconda Prompt 并输入 activate yourenvname

如果您使用的是 mac 或 Linux 操作系统,请打开 Terminal 并输入 source activate yourenvname

yourenvname 这里是你想要安装 pip 包的环境

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

那么你需要做的就是正常的pip install命令例如pip install yourpackage

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

【讨论】:

这篇文章暗示了一个非常糟糕的想法:不要在 conda 环境中使用 pip,除非你是“死胡同”,这意味着从那时起你将只在那个环境中使用 pip,并且永远不会再将 conda 包安装到该环境中。有关原因的更多信息,请参阅此帖子:anaconda.com/blog/using-pip-in-a-conda-environment【参考方案10】:

好吧,我尝试了以上所有方法。没有一个对我有用。以下对我有用:

    激活您的环境 从以下位置手动下载 .whl 包 https://pypi.org/simple// 在激活环境的情况下,从命令行导航到您下载 .whl 的文件夹 执行: pip install package_name_whatever.whl

【讨论】:

【参考方案11】:

我在 anaconda 上安装非 conda 包时遇到问题,我在这里遵循了最喜欢的答案,但效果并不好(可能是因为我的 anaconda 在 F 目录中,而创建的 env 在 C 中,bin 文件夹是未创建,我不知道,但它不起作用)。

根据 anaconda pip 已经安装(在 anaconda 提示符下使用命令“conda list”找到),但是没有安装 pip 包,所以这就是我所做的,我再次安装了 pip,然后 pip 安装了包。

conda install pip
pip install see

see 是一个非 conda 包。

【讨论】:

不要在 conda 环境中使用 pip,除非你是“死胡同”,这意味着从那时起你将只在那个环境中使用 pip,并且永远不会在那个环境中安装 conda 包再次。有关原因的更多信息,请参阅此帖子:anaconda.com/blog/using-pip-in-a-conda-environment【参考方案12】:

取决于您如何配置 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

一个额外的commet。安装 pip 的方式可能会产生问题:

您应该使用:conda install pip --> 使用 pip 安装的新软件包将被添加到 conda 列表中。

你应该 NOT 使用:sudo apt install python3-pip --> 新包不会被添加到 conda 列表中(因此不由 conda 管理)但你仍然可以使用它们(发生冲突的可能性)。

【讨论】:

一个额外的commet。安装 pip 的方式可能会产生问题: - 您应该使用: conda install pip --> 使用 pip 安装的新软件包将被添加到 conda 列表中。 - 你不应该使用:sudo apt install python3-pip --> 新包不会被添加到 conda 列表中(所以没有托管),但你仍然可以使用它们(可能会发生冲突)。 大家好 :) 我如何删除像 /usr/lib 这样的 bin 文件夹,以防它在运行 whereis pip 时位于我的 anaconda bin 文件夹之前? 尝试sudo apt remove python3-pip从您的Linux发行版中删除pip,然后在您使用的conda环境中:conda install -c anaconda pip【参考方案13】:

我在这里看到了很多很好的答案,但仍然想分享对我有用的我的答案,尤其是当您从 pip-era 切换到 conda-era 时。按照此操作,您可以使用condapip 安装任何软件包。

背景

PIP - 仅限 Python 包管理器 Conda - 包括 Python 在内的多种语言的包和环境管理器

每次创建新的 conda 环境时默认安装 Pip

# this installs pip for your newly created environment
conda create -n my_new_env pip 

# activate your new conda environment
conda activate my_new_env

# now you can install any packages using both conda and pip
conda install package_name

#or
pip install package_name

这使您可以灵活地在 conda 环境中安装任何包,即使它们在 conda 中不可用(例如 wordcloud)

conda activate my_new_env

# will not work as wordcloud is not available in conda
conda install wordcloud

# works fine
pip install wordcloud

【讨论】:

【参考方案14】:

如果您想要安装 conda。只需从 PATH 变量中删除所有其他 python 路径。

只离开:

C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Library\bin

这允许您只使用pip install *,它会直接安装到您的 conda 安装中。

【讨论】:

不要在 conda 环境中使用 pip,除非你是“死胡同”,这意味着从那时起你将只在那个环境中使用 pip,并且永远不会在那个环境中安装 conda 包再次。有关原因的更多信息,请参阅此帖子:anaconda.com/blog/using-pip-in-a-conda-environment【参考方案15】:

我知道最初的问题是关于 MacOS 下的 conda。但我想分享一下我在 Ubuntu 20.04 上的经验。

在我的情况下,问题是由于~/.bashrc 中定义的别名:alias pip='/usr/bin/pip3'。该别名优先于其他所有内容。

因此,出于测试目的,我删除了运行unalias pip 命令的别名。那么活动conda环境对应的pip就已经正常执行了。

同样的问题也适用于python 命令。

【讨论】:

【参考方案16】:

卸载重复的 python 安装。只需保留 anaconda 并使用此处指定的所需 python 版本创建一个环境:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html。然后你的 python 和 pip 版本会随着你在 env 之间切换而改变。

【讨论】:

以上是关于使用 Pip 将软件包安装到 Anaconda 环境的主要内容,如果未能解决你的问题,请参考以下文章

pip软件包安装 + Anaconda软件库安装 教程

4.Python中pip与Anaconda中的冲突

比较两个 anaconda 安装之间的包

使用Pip3和conda在mac上安装软件包

将pymysql安装到特定目录

在Anaconda虚拟环境中pip安装的包无法使用