我如何在 anaconda 下的 Mac 上安装 pandas 1.1.0 并通过挂在 "Solving environment" 上的 conda

How can I install pandas 1.1.0 on Mac under anaconda and get past conda hanging on "Solving environment"

当我尝试时:

% conda update pandas
Collecting package metadata (current_repodata.json): done
Solving environment: | 

Updating pandas is constricted by 

anaconda -> requires pandas==1.0.5=py38h959d312_0

If you are sure you want an update of your package either try `conda update --all` or install a specific version of the package you want using `conda install <pkg>=<version>`

done

# All requested packages already installed.

这个 on stack overflow 据说要尝试:

conda install -c conda-forge pandas==1.1.0

但这只是挂起:

% conda install -c conda-forge pandas==1.1.0
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: | 

如下所示,我可以使用

安装 pandas 的旧 1.0.5 版本
conda install -c anaconda pandas

所以我想我的环境似乎运行正常...我只是无法从 conda-forge

安装 Pandas 的 v 1.1.0
% conda install -c anaconda pandas
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /opt/anaconda3

  added / updated specs:
    - pandas


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    ca-certificates-2020.6.24  |                0         132 KB  anaconda
    certifi-2020.6.20          |           py38_0         159 KB  anaconda
    conda-4.8.5                |           py38_0         3.1 MB  anaconda
    openssl-1.1.1g             |       h1de35cc_0         3.4 MB  anaconda
    pandas-1.0.5               |   py38h959d312_0         9.8 MB  anaconda
    ------------------------------------------------------------
                                           Total:        16.6 MB

The following packages will be SUPERSEDED by a higher-priority channel:

  ca-certificates                                 pkgs/main --> anaconda
  certifi                                         pkgs/main --> anaconda
  conda                                           pkgs/main --> anaconda
  openssl                                         pkgs/main --> anaconda
  pandas                                          pkgs/main --> anaconda


Proceed ([y]/n)? y


Downloading and Extracting Packages
openssl-1.1.1g       | 3.4 MB    | ################################################################################################################################################################################################ | 100% 
pandas-1.0.5         | 9.8 MB    | ################################################################################################################################################################################################ | 100% 
certifi-2020.6.20    | 159 KB    | ################################################################################################################################################################################################ | 100% 
conda-4.8.5          | 3.1 MB    | ################################################################################################################################################################################################ | 100% 
ca-certificates-2020 | 132 KB    | ################################################################################################################################################################################################ | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

我尝试了 Anaconda Navigator,但是当我 select“pandas”升级并单击“应用”时,会出现 window 说以下软件包将被修改,但是window 为空。 window 中的应用按钮被禁用,所以我认为它没有做任何事情:

我能够通过 pip 升级到 pandas 1.1.3:

% pip install pandas --upgrade
Collecting pandas
  Downloading pandas-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl (10.1 MB)
     |████████████████████████████████| 10.1 MB 2.1 MB/s 
Requirement already satisfied, skipping upgrade: python-dateutil>=2.7.3 in /opt/anaconda3/lib/python3.8/site-packages (from pandas) (2.8.1)
Requirement already satisfied, skipping upgrade: pytz>=2017.2 in /opt/anaconda3/lib/python3.8/site-packages (from pandas) (2020.1)
Requirement already satisfied, skipping upgrade: numpy>=1.15.4 in /opt/anaconda3/lib/python3.8/site-packages (from pandas) (1.18.5)
Requirement already satisfied, skipping upgrade: six>=1.5 in /opt/anaconda3/lib/python3.8/site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)
Installing collected packages: pandas
  Attempting uninstall: pandas
    Found existing installation: pandas 1.0.5
    Uninstalling pandas-1.0.5:
      Successfully uninstalled pandas-1.0.5
Successfully installed pandas-1.1.3

我想这没问题,但不确定我的 anaconda 环境现在是否会以某种方式失去完整性。我想我的问题仍然存在,关于通过 anaconda/conda 升级的方式,或者可能没有区别,混合使用 anaconda/conda 和 pip 命令也可以。我真的不知道。

首先,关于 conda-forge 和 pip 的一些一般要点:

这是因为很有可能您最终会遇到一个处于不一致状态的环境,根本无法安装或删除软件包。如果 conda 的基础环境发生这种情况,那么唯一的方法通常是完全重新安装 Anaconda。

一般而言,最佳做法是使用 conda 虚拟环境,尤其是如果您 want/have 使用 conda-forge 和 pip。然后,如果您的环境进入不一致状态,您只需将其删除并重新开始。

在你的情况下,它可能看起来像这样:

  1. 创建一个新的 conda 环境 pandas_project,从官方 conda 频道安装 pandas 1.1.0:conda create -n pandas_project pandas==1.1.0
  2. 切换到新创建的环境conda activate pandas_project
  3. 使用 conda 和官方渠道安装尽可能多的包。
  4. 设置 conda-forge(仅针对此环境 (!),注意 --env 标志):conda config --env --add channels conda-forgeconda config --env --set channel_priority strict
  5. 从 conda-forge 官方渠道不可用的软件包安装
  6. 使用 conda list --explicit > pandas_project_env.txt 保存环境状态。
  7. 使用pip安装官方和conda-forge渠道都没有的包

如果环境最终处于不一致状态,请将其删除 conda env remove --name pandas_project 并重新创建。官方和conda-forge渠道的包可以快速重装conda install --file pandas_project_env.txt

Anaconda 附带了一大堆软件包 pre-installed。因此,它们当然具有相互依赖性,有时也会限制不能使用某些包的最新版本。所以在你的情况下,你可以在尝试

时看到
conda update pandas

它给了你

Updating pandas is constricted by 

anaconda -> requires pandas==1.0.5=py38h959d312_0

基本上告诉您 pre-installed anaconda 软件包捆绑包需要 pandas 版本 1.0.5 才能正常运行

当你这样做时

conda install -c conda-forge pandas=1.1.0

然后 conda 尝试理清导致之前安装 1.0.5 的所有要求,并尝试找到一种方法来获得您需要的版本。由于在您的基础环境中 pre-installed 的软件包列表很长(检查 conda list),这需要很长时间(您描述为挂起)并且最终可能会失败。

I was able to upgrade to pandas 1.1.3 via pip:

这是因为本质上,pip 将“不关心”pre-installed 与 anaconda

的库的所有相互依赖关系

not sure if my anaconda environment will now have lost its integrity

总结:

  1. conda 确信在当前状态下 1.0.5 是所有软件包正常工作所需的版本
  2. pip install 你强行安装了一个不同的版本

所以是的,原则上,由于使用 pip install 升级以前由 conda 管理的软件包,您现在处于不一致的软件包依赖关系状态,这是您永远不应该做的事情,请参阅 anaconda website 了解详情。

为了避免基础环境中 pre-installed 包的复杂化,您可以创建一个新环境并在其中自由安装所需的版本:

  1. conda create -n <env-Name> pandas=1.1
  2. conda activate <env-Name>

这将创建一个仅安装 pandas 的虚拟环境。然后你可以根据需要conda install其他包