2017-02-10 20 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的情況下),你至少可以告訴你這種可能性。 –