ChatGPT解决这个技术问题 Extra ChatGPT

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

康达 4.2.13 MacOSX 10.12.1

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

激活要放置程序的环境,然后 pip install a program...

我在 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 安装东西真的安全吗?我以为您可能会遇到问题,例如不知道要修复哪个版本的卸载...

J
Jules G.M.

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

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


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

您所要做的就是打开 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。
a
alex_danielssen

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

如果您有一个非 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

然后,您可以将模块标志 -m 与 python 一起使用,而不是仅调用 pip install <package>,以便它使用 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 找到 pip 的 its 版本并使用该版本来安装包。


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

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

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

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

https://i.stack.imgur.com/F0IbG.png


A
Allen Ye

如果在创建 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
i
intsco

python -m pip install Pillow

将使用激活的当前 Python 的 pip

source activate shrink_venv


L
Little Bobby Tables

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

sudo $(which pip) install <instert_package_name>

为我工作。

解释

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

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


P
Prabhakar Prasad

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

如果您在 linux 中安装了许多 pip 和 python 版本,则首先运行以下命令以列出所有已安装的 pip 路径。

点在哪里

你会得到类似这样的输出。

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

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

sudo /home/prabhakar/anaconda3/bin/pip install

这对我来说效果很好。如果安装有任何问题,请评论。


C
Code_Worm

如果您使用的是 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
P
Pieter

我在 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
B
BorjaEst

取决于您如何配置 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 管理),但您仍然可以使用它们(可能发生冲突)。


一颗额外的彗星。安装 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
A
Abu Shoeb

我在这里看到了很多很好的答案,但仍然想分享对我有用的我的答案,尤其是当您从 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

M
MGLondon

好吧,我尝试了以上所有方法。由于公司环境中的代理设置存在问题,没有一个对我有用。幸运的是,我可以从浏览器打开 pypi 网站。最后,以下对我有用:

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


m
moto

如果您只想安装 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
R
Rocky

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

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

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

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


B
Bruck Wubete

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