【问题标题】:Using Pip to install packages to Anaconda Environment使用 Pip 将软件包安装到 Anaconda 环境
【发布时间】: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 安装东西真的安全吗?我认为您可能会遇到问题,例如不知道要修复哪个版本的卸载...

标签: python pip anaconda environment


【解决方案1】:

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

  1. 运行conda create -n venv_nameconda activate venv_name,其中venv_name 是您的虚拟环境的名称。

  2. 运行conda install pip。这会将 pip 安装到您的 venv 目录。

  3. 找到您的 anaconda 目录,然后找到实际的 venv 文件夹。它应该是 /anaconda/envs/venv_name/ 之类的地方。

  4. 通过/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】:

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

  1. 打开 Anaconda
  2. 在主页下方的左侧窗格中选择环境
  3. 就在您选择的位置右侧和“搜索环境”栏下方,您应该会看到 base(root)。点击它
  4. 应该会出现一个指向右侧的三角形,单击它并选择“打开终端”
  5. 在此处使用常规的 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】:

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

          1. 激活您的环境
          2. 从以下位置手动下载 .whl 包 https://pypi.org/simple//
          3. 在激活环境的情况下,从命令行导航到您下载 .whl 的文件夹
          4. 执行: 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 之间切换而改变。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-07-16
                  • 1970-01-01
                  • 2013-09-09
                  • 2020-03-13
                  • 2018-11-17
                  • 2016-02-09
                  相关资源
                  最近更新 更多