2017-02-10 73 views
2

我是新来的Python和我还使用蟒蛇3.在Windows 10,最近安装PyCharm 2016.3软件包管理:PyCharm VS畅达VS PIP

我不知道很多关于包管理,并想更好地理解它。通常我只使用conda update --all,但我注意到(通过检查我的本地PyCharm解释器的软件包列表),这不会将所有软件包升级到最新版本。

一个这样的包是枕头,其中有一个版本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 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解释器的软件包列表现在显示枕头为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)由于现在我枕头3.4.2(在/anaconda3/pkgs)和枕头4.0.0(在/anaconda3/lib/site-packages)哪一个如果我进口枕头会使用?

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从哪个渠道获取这些信息?

+0

有很多人把这个讨论的每个部分都散列出来了:http://stackoverflow.com/search?q=conda+vs+pip FWIW:我个人的意见是不要参与conda并使用点子。 Pycharm是一名编辑。 – Kelvin

+0

@Kelvin感谢您的反馈!我意识到conda vs pip的事情已经在之前讨论过了,但如果你阅读我的文章,你会发现我不只是要求比较两者。我在最后问了一些具体的问题,我没有在这里看到答案。你能帮助我吗?我也意识到PyCharm是一名编辑。我只是指它能够检查软件包是否是最新的。 –

回答

1

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

1)康达推迟到处理依赖性/解决冲突中的“痛前面”的方法。你必须让你所有的软件包能够很好地一起玩在你可以制作软件包或者将它们放在一个环境中的回购/通道中。 你可以尝试使用--force或--no-deps来运行它,以尝试使用它,但是.....这可能会在将来给你带来问题(我不知道这是否可以与更高版本的conda,它会改变很多)。只需保持软件包最新,最新,我只会使用点。它在过去几年里有很长的路要走(https://glyph.twistedmatrix.com/2016/08/python-packaging.html

2)我并不完全确定,我相信这将与为conda提供显式非URL通道有关。通常情况下,您将它传递给conda-forge repo(我认为,我们再也没有在内部使用conda-forge)。

3)*表示您忽略修补程序/内部版本4.0.0 == Major.Minor.Build。同样,3.5 * == 任何版本的3.5

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

5)通(虽然我想是这样)

6)

  • PIP:意味着你通过PIP安装包。如果你这样做畅达列表--explicit
  • py35_0它不会被拾起:已要求/只提供给ENVS /使用Python包3.5
  • py35_4:不知道(总是忘了一个)
  • np111py35_2:需要python3.5也numpy的1.11(我认为*)

7)我倾向于避开pycharm的,我相信你可以检查Python解释pycharm指向在看什么环境它的英寸根据根环境,你可以做一个conda info an d获取您指向的所有频道的列表。

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

+0

@凯文感谢您的帮助!当我尝试更新或安装软件包时,pip会通知我可能的冲突吗? –

+0

我不确定,pip用于卸载并安装更高版本,如果它是后续依赖项列表的一部分(我相信)..我现在不知道它现在的功能。我有一段时间没有用过它。它不知道任何冲突。 – Kelvin

+0

如果pip不知道有关冲突的事情,那么这不是一个有利于conda的有力论据,还是我在这里错过了一些东西?看起来像使用一个管理器是一个不错的主意,至少在你安装了几十个软件包时(至少在你下载Anaconda的情况下),你至少可以告诉你这种可能性。 –