python - 管理包: PyCharm vs conda vs pip

标签 python pip pycharm package conda

我是 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.

后来我发现 Conda-forge 上也有 Pillow,所以我尝试了 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 --> 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 从哪个 channel 获取此信息?

最佳答案

好吧,我无法回答您的所有问题,但这里是:

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

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

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

4)我会在终端中导入pillow,然后打印出模块以查看它是从哪里提取的,为什么猜测?

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 并获取您指向的所有 channel 的列表。

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

关于python - 管理包: PyCharm vs conda vs pip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161933/

相关文章:

python - 如何修复编程错误 : (1064,“您的 SQL 语法有错误)?

python - 如何在 python 中使用 append 和 pickle?

Python - 无法升级 6,卸载以前的版本时出现问题

python - 为什么 pip freeze list "pkg-resources==0.0.0"?

pycharm - Pycharm Pro 中的 Jupyter Notebook 输入身份验证 token

Python 多处理 get 不会超时

Python - 索引错误 : list index out of range NOT being thrown when it should be

python - pip freeze 输出中的 future 安全版本号

sqlite - 如何在 pycharm 中查看 sqlite 数据库的架构?

python - 通过在 PyCharm 2016.3.2 中运行的 Python 3.6 脚本打开 UTF-8 编码的文件