使用 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_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 的要求指示完整路径)。【参考方案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 <package>
,您可以将模块标志-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 的 pipsource activate shrink_venv
【讨论】:
【参考方案7】:对于那些希望使用 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
。这是因为$()
是单独运行的,并且文本输出添加到了外部命令中。
【讨论】:
【参考方案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
安装<package-name>
这对我来说效果很好。安装有问题,欢迎评论。
【讨论】:
【参考方案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 时。按照此操作,您可以使用conda
和pip
安装任何软件包。
背景
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 环境的主要内容,如果未能解决你的问题,请参考以下文章