Anaconda 如何从conda安装pillow而不降级Python,也不从源代码构建pillow

Anaconda 如何从conda安装pillow而不降级Python,也不从源代码构建pillow,anaconda,python-imaging-library,conda,Anaconda,Python Imaging Library,Conda,我在Ubuntu19.04上使用了miniconda,由普通用户安装,而不是通过sudo将其与系统安装的软件包分开。我的所有康达套餐均通过以下方式更新: condaw update -n envpython3 --all 现在,Python 3.7.4是安装在conda env中的Python版本 查看pillow的文档,我发现版本7似乎是最新的(但是版本6可能会做得很好,因为它支持3.7.x,但是这里的“x”是这个问题的关注点;请继续阅读): 但是,我可以使用来自同一个conda env的p

我在Ubuntu19.04上使用了miniconda,由普通用户安装,而不是通过sudo将其与系统安装的软件包分开。我的所有康达套餐均通过以下方式更新:

condaw update -n envpython3 --all
现在,Python 3.7.4是安装在conda env中的Python版本

查看pillow的文档,我发现版本7似乎是最新的(但是版本6可能会做得很好,因为它支持3.7.x,但是这里的“x”是这个问题的关注点;请继续阅读):

但是,我可以使用来自同一个conda env的pip安装它,而没有任何抱怨:

$ pip install Pillow
Collecting Pillow
  Downloading https://files.pythonhosted.org/packages/a4/da/2bd281c875686230eabc13d20ab590ea617563b0e746abfb0698c4d5b645/Pillow-6.1.0-cp37-cp37m-manylinux1_x86_64.whl (2.1MB)
Installing collected packages: Pillow
Successfully installed Pillow-6.1.0
$
然而,我认为这可能是一件坏事,因为我推测康达将管理许多其他包,而pip将无法充分处理(因此我在大多数情况下更喜欢康达而不是pip)

因此,问题是:如何使用最新版本的conda managed pillow,而不降级任何其他包(如Python),也不从源代码构建pillow

理想情况下,我可以解决这个问题,而不必为使用pillow的脚本使用完全独立的conda env,这是一个维护负担(例如,我设想这种情况会发生在我身上:“该死!我以为我已经安装了pillow!啊,不,它在另一个conda env.叹气中。”),但如果这是答案,那就这样吧,但我仍然想知道为什么枕头(或它所依赖的东西)似乎在迫使python降级


(此外,上面的输出没有说明为什么需要降级软件包,我只能想象这是因为当我想使用最新版本的时,pillow需要3.7.1。)

一般来说,将PyPI软件包安装与Conda混合使用是一个坏主意,尤其是如果计划更新env中的任何软件包。Anaconda团队在博客帖子“”中对可能遇到的各种陷阱有一个很好的概述

选择权 创建一个新环境 根据他们的建议,以及我个人的经验,在创建新的环境时要自由,一旦项目规范被强化,就要将新的包安装和更新限制在必要的范围内(例如,所需的bug修复、API更新等)。我知道你明确说过你不想这样做,但在我看来这是最好的选择

尝试其他渠道 虽然在您的案例中,这并没有实现,但检查替代通道(如Conda Forge)可能是有用的(即,
-c Conda Forge
)。同时,我要提醒大家,不要简单地搜索巨蟒云,寻找一个碰巧有你想要的频道。仅从您信任的渠道安装

封装钉扎
另一个选择是明确表示您不想更改(例如,
python=3.7.4
)。这将迫使依赖项求解器找出如何准确地完成问题中所要求的内容,如果它不起作用,则有相当有力的证据表明仅使用Conda软件包是不可能实现这种配置的。

是的,混合使用PyPI通常是个坏主意,尤其是如果您计划更新其中的任何软件包,这听起来像是你的意图(见)。您是否检查过其他频道选项(例如,
conda forge
)?也许还值得一看解算器的功能。@merv我曾尝试过
conda forge
,但结果是空的。您提供的链接确实给了我一个我已经得出结论的答案:我必须有一个单独的conda env才能继续。这是一个麻烦,但直到这个包是建立在康达,这是我必须做的。我还没有试过这个把戏,但我会去探索。@merv如果你把你的评论作为一个答案,我会这样做。
$ condaw install -n envpython3 -c anaconda pillow
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: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: done

## Package Plan ##

  environment location: /home/brentg/conda/Ubuntu.19.04.miniconda3/envs/envpython3

  added / updated specs:
    - pillow


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    ca-certificates-2019.5.15  |                1         134 KB  anaconda
    certifi-2019.6.16          |           py37_1         156 KB  anaconda
    freetype-2.9.1             |       h8a8886c_1         822 KB  anaconda
    jpeg-9b                    |       habf39ab_1         247 KB  anaconda
    libpng-1.6.37              |       hbc83047_0         364 KB  anaconda
    libtiff-4.0.10             |       h2733197_2         604 KB  anaconda
    olefile-0.46               |           py37_0          48 KB  anaconda
    openssl-1.1.1              |       h7b6447c_0         5.0 MB  anaconda
    pillow-6.1.0               |   py37h34e0f95_0         635 KB  anaconda
    zstd-1.3.7                 |       h0b5b093_0         887 KB  anaconda
    ------------------------------------------------------------
                                           Total:         8.8 MB

The following NEW packages will be INSTALLED:

  freetype           anaconda/linux-64::freetype-2.9.1-h8a8886c_1
  jpeg               anaconda/linux-64::jpeg-9b-habf39ab_1
  libpng             anaconda/linux-64::libpng-1.6.37-hbc83047_0
  libtiff            anaconda/linux-64::libtiff-4.0.10-h2733197_2
  olefile            anaconda/linux-64::olefile-0.46-py37_0
  pillow             anaconda/linux-64::pillow-6.1.0-py37h34e0f95_0
  zstd               anaconda/linux-64::zstd-1.3.7-h0b5b093_0

The following packages will be UPDATED:

  openssl              pkgs/main::openssl-1.1.1c-h7b6447c_1 --> anaconda::openssl-1.1.1-h7b6447c_0

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

  ca-certificates                                 pkgs/main --> anaconda
  certifi                                         pkgs/main --> anaconda

The following packages will be DOWNGRADED:

  cffi                                1.12.3-py37h2e261b9_0 --> 1.11.5-py37he75722e_1
  chardet                                   3.0.4-py37_1003 --> 3.0.4-py37_1
  cryptography                           2.7-py37h1ba5d50_0 --> 2.4.2-py37h1ba5d50_0
  libedit                           3.1.20181209-hc058e9b_0 --> 3.1.20170329-h6b74fdf_2
  libgcc-ng                                9.1.0-hdf63c60_0 --> 8.2.0-hdf63c60_1
  libstdcxx-ng                             9.1.0-hdf63c60_0 --> 8.2.0-hdf63c60_1
  pip                                         19.2.2-py37_0 --> 18.1-py37_0
  pyopenssl                                   19.0.0-py37_0 --> 18.0.0-py37_0
  pysocks                                      1.7.0-py37_0 --> 1.6.8-py37_0
  python                                   3.7.4-h265db76_1 --> 3.7.1-h0371630_7
  requests                                    2.22.0-py37_0 --> 2.21.0-py37_0
  setuptools                                  41.0.1-py37_0 --> 40.6.3-py37_0
  sqlite                                  3.29.0-h7b6447c_0 --> 3.26.0-h7b6447c_0
  urllib3                                     1.24.2-py37_0 --> 1.24.1-py37_0
  wheel                                       0.33.4-py37_0 --> 0.32.3-py37_0


Proceed ([y]/n)? n


CondaSystemExit: Exiting.

$
$ pip install Pillow
Collecting Pillow
  Downloading https://files.pythonhosted.org/packages/a4/da/2bd281c875686230eabc13d20ab590ea617563b0e746abfb0698c4d5b645/Pillow-6.1.0-cp37-cp37m-manylinux1_x86_64.whl (2.1MB)
Installing collected packages: Pillow
Successfully installed Pillow-6.1.0
$