【问题标题】:Managing packages: PyCharm vs conda vs pip管理包:PyCharm vs conda vs pip
【发布时间】:2017-06-28 22:51:06
【问题描述】:

我是 Python 新手,最近在 Windows 10 上安装了 PyCharm 2016.3。我也在使用 Anaconda 3。

我对包管理知之甚少,希望更好地了解它。通常我只使用conda update --all,但我注意到(通过检查我本地 PyCharm 解释器的包列表)这不会将所有包升级到最新版本。

其中一个包是 Pillow,它的版本为 4.0.0,但 conda (4.3.11) 不会将其更新到 3.4.2 之后。我试过conda install pillow: 4.0.0 得到:

UnsatisfiableError: The following specifications were found to be in conflict:
  - pillow 4.0.0*
  - python 3.5*
  - spyder-app
Use "conda info <package>" to see the dependencies for each package.

后来我发现 Pillow 也可以在 conda-forge 上使用,所以我尝试了 conda install -c conda-forge pillow=4.0.0 并得到:

The following NEW packages will be INSTALLED:

    libiconv:  1.14-vc14_4   conda-forge [vc14]
    libxml2:   2.9.3-vc14_9  conda-forge [vc14]
    olefile:   0.44-py35_0   conda-forge
    vc:        14-0          conda-forge

The following packages will be UPDATED:

    freetype:  2.5.5-vc14_2              [vc14] --> 2.7-vc14_0    conda-forge [vc14]
    jpeg:      8d-vc14_2                 [vc14] --> 9b-vc14_0     conda-forge [vc14]
    libtiff:   4.0.6-vc14_2              [vc14] --> 4.0.6-vc14_7  conda-forge [vc14]
    pillow:    3.4.2-py35_0              --> 4.0.0-py35_2  conda-forge

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

    conda:     4.3.11-py35_0             --> 4.2.13-py35_0 conda-forge
    conda-env: 2.6.0-0                   --> 2.6.0-0       conda-forge
    qt:        4.8.7-vc14_9              [vc14] --> 4.8.7-vc14_6  conda-forge [vc14]

我决定不继续,而是尝试pip install pillow。由于此命令不要求确认软件包已简单安装。现在,当我输入 conda list 时,我得到:

Pillow                    4.0.0                     <pip>
pillow                    3.4.2                    py35_0

PyCharm 解释器的包列表现在显示 Pillow 为 4.0.0 版,但 conda update pillow 仍然返回:

# All requested packages already installed.
pillow                    3.4.2                    py35_0

我的问题是:

1) 我应该依靠什么来使我的所有软件包保持最新,而不会出现兼容性问题?

2) 为什么conda install pillow: 4.0.0 会返回错误而conda install -c conda-forge pillow=4.0.0 没有?

3) 依赖列表中pillow 4.0.0和python 3.5旁边的*是什么意思?

4) 从现在开始,我同时拥有 Pillow 3.4.2(/anaconda3/pkgs)和 Pillow 4.0.0(/anaconda3/lib/site-packages)如果我导入 Pillow,会使用哪一个?

5) 取代 conda: 4.3.11-py35_0 --&gt; 4.2.13-py35_0 conda-forge 是否意味着 conda 正在降级?

6) 标签 pip、py35_0、py35_4、np111py35_2 等有什么区别?

7) PyCharm 告诉我 Jinja2 包的版本为 2.9.5,但普通的 conda 和 conda-forge 只能找到 2.9.4。 PyCharm 从哪个渠道获取这些信息?

【问题讨论】:

  • 有很多人已经讨论了这个讨论的每个部分:stackoverflow.com/search?q=conda+vs+pip FWIW:我的个人意见是不要参与 conda,而只是使用 pip。 Pycharm 是一个编辑器。
  • @Kelvin 感谢您的反馈!我意识到 conda vs pip 之前已经讨论过,但是如果您阅读我的帖子,您会发现我不只是要求对两者进行比较。我最后问了一些我在这里没有看到回答的具体问题。你能帮我解决其中的任何一个吗?我也意识到 PyCharm 是一个编辑器。我只是指它检查包是否是最新的能力。

标签: python pip pycharm packages conda


【解决方案1】:

好的,我不能回答你所有的问题,但这里是:

1) Conda 遵循“预先解决问题”的方法来处理依赖/冲突解决方案。您必须让所有包在您可以制作包或将它们放在一起的环境中的存储库/频道中很好地一起玩。 您可以尝试使用--force 或--no-deps 运行它 以尝试获取它,但是.....这可能会在将来给您带来问题(我不知道是否这样甚至可以与更高版本的 conda 一起使用,它改变了很多)。只需保持包是最新的,并且是最新的,我只会使用 pip。在过去的几年里,它取得了长足的进步 (https://glyph.twistedmatrix.com/2016/08/python-packaging.html)

2)我不完全确定,我相信这与为 conda 提供一个明确的非 url 通道有关。通常,您将 URL 传递给 conda-forge 存储库(我认为,我们再次在内部不使用 conda-forge)。

3) * 表示您忽略了补丁/构建 4.0.0 == Major.Minor.Build。同样,3.5* == 3.5 的任何版本

4) 我会在终端中导入枕头,然后打印出模块,看看它是从哪里拉出来的,为什么要猜?

5) 通过(虽然我是这么认为的)

6)

  • pip :表示您通过 pip 安装了该软件包。如果您执行 conda list --explicit,它将不会被拾取
  • py35_0:有一个要求/仅适用于使用 python 3.5 的环境/包
  • py35_4:不确定(总是忘记那个)
  • np111py35_2:需要 python3.5 和 numpy 1.11(我认为 *)

7)我倾向于避开pycharm,我相信你可以检查pycharm指向的python解释器,看看它在什么环境。基于root环境,你可以做一个conda info 并获取您指向的所有频道的列表。

注意:如果您打算使用 conda,您可能只想将 conda-forge 添加到您的频道列表中,而不是传递 -c (但查看其他频道的组织方式应该有助于您了解应该如何传递-c 标志)

【讨论】:

  • @Kevin 感谢您的帮助!当我尝试更新或安装软件包时,pip 会通知我可能的冲突吗?
  • 我不确定,如果它是后续依赖项列表的一部分,pip 用于卸载和安装更高版本(我相信).. 我不知道这些天它现在做了什么。我已经有一段时间没有将它用于任何重要的事情了。它对冲突一无所知。
  • 如果 pip 对冲突一无所知,这不是支持 conda 的有力论据,还是我在这里遗漏了什么?似乎最好使用一个管理器,它至少会在您安装了数十个软件包时通知您这种可能性(就像您下载 Anaconda 时的情况一样)
  • 是,不是。有时冲突发生在与您的代码完全无关的库的一部分。这可能只是你的一个痛点。或者,开发人员需要了解他或她正在使用哪些库,因此您只需拥有依赖项并根据需要进行更正。
猜你喜欢
  • 2021-04-08
  • 2016-07-10
  • 2016-06-01
  • 2016-04-25
  • 2019-02-27
  • 2014-10-14
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多