管理包:PyCharm vs conda vs pip

时间:2017-02-10 14:36:41

标签: python pip pycharm packages conda

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

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

其中一个包是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 Interpreter的包列表现在将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)依赖列表中的枕头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告诉我有一个版本2.9.5的Jinja2包,但正常的conda和conda-forge只能找到2.9.4。 PyCharm从哪个频道获取此信息?

1 个答案:

答案 0 :(得分:2)

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

1)Conda遵循处理依赖/冲突解决方案的“前方痛苦”方法。你必须让你所有的软件包在你可用的repo /渠道中很好地一起玩,甚至可以制作一个包或者将它们放在一起环境中。 您可以尝试使用--force或--no-deps 来尝试将其运行但是......这可能会在将来导致问题(我不知道是否会甚至可以使用更高版本的conda,它会发生很大变化)。只需保持包最新,最新,我只需使用pip。它在过去几年中取得了很大进展(https://glyph.twistedmatrix.com/2016/08/python-packaging.html

2)我不完全确定,我认为这与为conda提供明确的非url频道有关。通常你将URL传递给conda-forge repo(我想,我们再也不在内部使用conda-forge)。

3)*表示你忽略了patch / build 4.0.0 == Major.Minor.Build。同样,3.5 * == 任何版本的3.5

4)我会在一个终端中导入枕头,然后打印出模块以查看其被拉出的位置,为什么猜?

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

6)

  • pip:表示您通过pip安装了该软件包。如果您执行 conda list --explicit
  • ,则不会被提取
  • py35_0:有一个要求/仅适用于使用python 3.5
  • 的envs / packages
  • py35_4:不确定(总是忘记那个)
  • np111py35_2:需要python3.5和numpy 1.11(我认为*)
7)我倾向于避开pycharm,我相信你可以检查pycharm指向的python解释器,看看它所处的环境。根据root环境,你可以做一个 conda info < / em>并获取您指向的所有频道的列表。

注意:如果你打算使用conda,你可能只想在你的频道列表中添加conda-forge而不是传递-c(但是看看其他频道是如何组织的,应该会帮助你看看你应该如何传递-c flag)