康达 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
环境变量?
对于遇到这种情况的其他人,我发现这是最直接的解决方案:
运行 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 成功安装软件包!
您所要做的就是打开 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
conda install pip
以确保您使用的是本地版本的 pip。
我通过以下方式解决了这个问题:
如果您有一个非 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 版本并使用该版本来安装包。
这对我有用(参考图片链接)
在主页下方的左侧窗格中打开 Anaconda Select Environments 在您选择的位置右侧和“搜索环境”栏下方,您应该看到 base(root)。单击它应该会出现一个指向右侧的三角形,单击它并选择“打开终端” 在此处使用常规的 pip install 命令。无需指向环境/路径
为了将来参考,如果您碰巧已经满足要求,您可以找到您的软件包正在下载到的文件夹。如果您在终端中向上滚动,您可以看到它。它应该是这样的:要求已经满足,然后是路径
https://i.stack.imgur.com/F0IbG.png
如果在创建 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" "$@"
}
希望这对你有帮助。
python -m pip install Pillow
将使用激活的当前 Python 的 pip
source activate shrink_venv
对于那些希望使用 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
。这是因为 $()
是单独运行的,并且文本输出添加到外部命令中。
以上所有答案主要基于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
这对我来说效果很好。如果安装有任何问题,请评论。
如果您使用的是 Windows 操作系统,请打开 Anaconda Prompt 并输入 activate yourenvname
如果您使用的是 mac 或 Linux 操作系统,请打开 Terminal 并输入 source activate yourenvname
yourenvname
这是您想要安装 pip 包的环境
输入上述命令后,您必须在控制台输出中看到您的环境名称已从 base
更改为您输入的环境 yourenvname
(这意味着您现在处于所需的环境上下文中)
那么您需要做的就是正常的 pip install
命令,例如 pip install yourpackage
通过这样做,pip 包将安装在您的 Conda 环境中
我在 anaconda 上安装非 conda 包时遇到问题,我在这里遵循了最喜欢的答案,但效果并不好(可能是因为我的 anaconda 在 F 目录中,而创建的 env 在 C 中,而 bin 文件夹没有创建,我不知道,但它没有用)。
根据 anaconda pip 已经安装(在 anaconda 提示符下使用命令“conda list
”找到),但是没有安装 pip 包,所以这就是我所做的,我再次安装了 pip,然后 pip 安装了包。
conda install pip
pip install see
see
是一个非 conda 包。
取决于您如何配置 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 管理),但您仍然可以使用它们(可能发生冲突)。
/usr/lib
这样的 bin 文件夹,以防它在运行 whereis pip
时位于我的 anaconda bin 文件夹之前?
sudo apt remove python3-pip
从您的 linux 发行版中删除 pip,然后在您正在使用的 conda 环境中:conda install -c anaconda pip
。
我在这里看到了很多很好的答案,但仍然想分享对我有用的我的答案,尤其是当您从 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
好吧,我尝试了以上所有方法。由于公司环境中的代理设置存在问题,没有一个对我有用。幸运的是,我可以从浏览器打开 pypi 网站。最后,以下对我有用:
激活您的环境 从 https://pypi.org/simple/
如果您只想安装 conda。只需从 PATH 变量中删除所有其他 python 路径。
只离开:
C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Library\bin
这允许您只使用 pip install *
,它将直接安装到您的 conda 安装中。
我知道最初的问题是关于 MacOS 下的 conda。但我想分享一下我在 Ubuntu 20.04 上的经验。
在我的情况下,问题是由于 ~/.bashrc
中定义的别名:alias pip='/usr/bin/pip3'
。该别名优先于其他所有内容。
因此,出于测试目的,我删除了运行 unalias pip
命令的别名。然后活动 conda 环境对应的 pip
已经正确执行。
同样的问题也适用于 python
命令。
卸载重复的 python 安装。只需保留 anaconda 并使用此处指定的所需 python 版本创建一个环境:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html。然后,当您在 env 之间切换时,您的 python 和 pip 版本会发生变化。
bin
文件夹的路径是否已更改?我不再在venv_name
文件夹中看到它?pip
(无论它是否是环境),并使用 conda 文件夹中的pip
可执行文件安装您想要的包(我的情况:AppData\Local\Continuum\anaconda3\Scripts
)pip
时,是否有办法让与当前 conda 环境关联的 pip 无缝运行? (而不是按照步骤 4 的要求指示完整路径)。