Sự khác biệt giữa pip và conda là gì?


722

Tôi biết piplà một người quản lý gói cho các gói python. Tuy nhiên, tôi thấy cài đặt trên trang web của IPython sử dụng condađể cài đặt IPython.

Tôi có thể sử dụng pipđể cài đặt IPython không? Tại sao tôi nên sử dụng condanhư một trình quản lý gói python khác khi tôi đã có pip?

Sự khác biệt giữa pipvà là condagì?


Đọc kỹ trang cài đặt, bạn sẽ thấy hướng dẫn đầy đủ để cài đặt với pip và đó là conda/ enpgkđược nhắm mục tiêu new users who want to get up and running with minimal effort: tán / anaconda là môi trường độc lập, không can thiệp vào python hệ thống (như venv nhưng mạnh mẽ hơn). BTW IPyhton, không phải iPython (chữ hoa I)
Matt

3
Một điểm khác biệt là nhiều thứ có thể được cài đặt bằng pip hơn là bằng conda: pip có thể cài đặt mọi thứ từ pypi trong một lệnh. conda yêu cầu ba lệnh: bộ xương, xây dựng, cài đặt và có thể nhiều hơn nếu điều đó không hoạt động. Pip có thể cài đặt bất cứ thứ gì từ github hoặc nguồn trong một lệnh. conda yêu cầu viết một "công thức", điều này không dễ, đặc biệt là vì tài liệu này dường như luôn không chính xác / lỗi thời.
endolith

5
Câu hỏi liên quan: NHỮNG ƯU ĐIỂM của pip so với conda là gì? Tôi thấy rất nhiều sự ủng hộ của Anaconda bên dưới, nhưng không có gì cho pip. Tại sao pip vẫn là tiêu chuẩn, nếu anaconda là rất lớn?
Brian Postow

24
Tôi thấy câu nói này khai sáng: " Pip là một người quản lý gói và Virtualenv là một người quản lý môi trường. Conda là cả hai." (tham khảo )
Vào

1
Quan sát: Tôi từng nghĩ rằng conda ngụ ý tải xuống một gói zillion, nhưng điều này rõ ràng không còn đúng nữa: bạn có thể cài đặt miniconda, dường như chỉ là trình quản lý gói, conda.io/docs/install/quick.html
Hugh Perkins

Câu trả lời:


520

Trích dẫn từ blog Conda :

Đã tham gia vào thế giới python từ rất lâu, tất cả chúng ta đều biết về pip, easy_install và virtualenv, nhưng những công cụ này không đáp ứng tất cả các yêu cầu cụ thể của chúng tôi. Vấn đề chính là họ tập trung vào Python, bỏ qua các phụ thuộc thư viện không phải của Python, chẳng hạn như HDF5, MKL, LLVM, v.v., không có setup.py trong mã nguồn của họ và cũng không cài đặt tệp vào trang web của Python thư mục -packages.

Vì vậy, Conda là một công cụ đóng gói và trình cài đặt nhằm mục đích làm nhiều hơn những gì piplàm; xử lý các phụ thuộc thư viện bên ngoài các gói Python cũng như chính các gói Python. Conda cũng tạo ra một môi trường ảo, giống như virtualenv.

Do đó, Conda nên được so sánh với Buildout , một công cụ khác cho phép bạn xử lý cả các tác vụ cài đặt Python và không phải Python.

Vì Conda giới thiệu một định dạng đóng gói mới, bạn không thể sử dụng pipvà Conda thay thế cho nhau; pipkhông thể cài đặt định dạng gói Conda. Bạn có thể sử dụng hai công cụ cạnh nhau (bằng cách cài đặt pipvới conda install pip) nhưng họ không tương thích một trong hai.

Kể từ khi viết câu trả lời này, Anaconda đã xuất bản một trang mới về Tìm hiểu về Conda và Pip , cũng lặp lại điều này:

Điều này nhấn mạnh một sự khác biệt chính giữa conda và pip. Pip cài đặt các gói Python trong khi conda cài đặt các gói có thể chứa phần mềm được viết bằng bất kỳ ngôn ngữ nào. Ví dụ, trước khi sử dụng pip, trình thông dịch Python phải được cài đặt thông qua trình quản lý gói hệ thống hoặc bằng cách tải xuống và chạy trình cài đặt. Mặt khác, Conda có thể cài đặt các gói Python cũng như trình thông dịch Python trực tiếp.

và hơn thế nữa

Đôi khi, một gói là cần thiết không có sẵn như một gói conda nhưng có sẵn trên PyPI và có thể được cài đặt với pip. Trong những trường hợp này, nên cố gắng sử dụng cả conda và pip.


18
Cảm ơn lời giải thích của bạn. Tôi vẫn còn bối rối, tuy nhiên, liệu Conda có thể thay thế pip không? tức là, Conda có thể làm tất cả những gì pip có thể làm không?
lazywei

10
@lazywei: Tôi không nghĩ nó có thể; có vẻ như Conda không hỗ trợ định dạng lưu trữ bánh xe chẳng hạn. Họ có mục đích khác nhau.
Martijn Pieters

45
@ naught101 "Chỉ cần tạo một công thức" Điều đó không dễ như gõ pip install.
endolith

23
Một số có thể giải thích cho tôi những gì sẽ xảy ra nếu bạn sử dụng pip và conda để cài đặt cùng một gói ngoại trừ với phiên bản khác nhau, python sẽ sử dụng khi bạn nhập chúng?
Lance Ruo Zhang

4
@jrh: bạn không thể cài đặt nhiều phiên bản của cùng một gói khi sử dụng trình quản lý gói hệ điều hành, không phải là một tính năng cốt lõi. Conda quản lý các môi trường , mỗi môi trường có hỗn hợp các gói được cài đặt riêng ở các phiên bản cụ thể. Vì vậy, dự án A, đã được phát triển cách đây một thời gian, vẫn có thể bám vào phiên bản cũ hơn của thư viện Foo (không có tài nguyên để nâng cấp dự án để làm việc với bản phát hành mới hơn) trong khi dự án B yêu cầu phiên bản mới nhất của cùng thư viện.
Martijn Pieters

246

Đây là một danh sách ngắn:

pip

  • Chỉ các gói Python.
  • Tổng hợp mọi thứ từ nguồn. EDIT: Pip hiện cài đặt bánh xe nhị phân, nếu chúng có sẵn.
  • Được ban phước bởi cộng đồng Python cốt lõi (ví dụ, Python 3.4+ bao gồm mã tự động bootstraps pip).

conda

  • Thuyết bất khả tri. Trọng tâm chính của các gói hiện có là dành cho Python và thực sự bản thân Conda được viết bằng Python, nhưng bạn cũng có thể có các gói Conda cho thư viện C hoặc gói R hoặc thực sự bất cứ thứ gì.
  • Cài đặt nhị phân. Có một công cụ được gọi là conda buildxây dựng các gói từ nguồn, nhưng conda installchính nó sẽ cài đặt mọi thứ từ các gói Conda đã được xây dựng.
  • Bên ngoài. Conda là người quản lý gói của Anaconda, bản phân phối Python được cung cấp bởi Continuum Analytics, nhưng nó cũng có thể được sử dụng bên ngoài Anaconda. Bạn có thể sử dụng nó với cài đặt Python hiện có bằng cách cài đặt pip (mặc dù điều này không được khuyến khích trừ khi bạn có lý do chính đáng để sử dụng cài đặt hiện có).

Trong cả hai trường hợp:

  • Viết bằng Python
  • Nguồn mở (Conda là BSD và pip là MIT)

Hai điểm đầu tiên của Conda thực sự là những gì làm cho nó có lợi thế hơn pip cho nhiều gói. Vì pip cài đặt từ nguồn, nên có thể khó cài đặt mọi thứ với nó nếu bạn không thể biên dịch mã nguồn (điều này đặc biệt đúng trên Windows, nhưng nó thậm chí có thể đúng trên Linux nếu các gói có thư viện C hoặc FORTRAN khó phụ thuộc). Conda cài đặt từ nhị phân, có nghĩa là ai đó (ví dụ Continuum) đã thực hiện công việc khó khăn trong việc biên dịch gói và do đó việc cài đặt rất dễ dàng.

Cũng có một số khác biệt nếu bạn quan tâm đến việc xây dựng các gói của riêng bạn. Chẳng hạn, pip được xây dựng dựa trên các setuptools, trong khi Conda sử dụng định dạng riêng của nó, có một số lợi thế (như là tĩnh, và một lần nữa, thuyết bất khả tri của Python).


21
Pip không còn xây dựng mọi thứ từ nguồn. Nếu một bánh xe có sẵn, pip install --use-wheel <package>sẽ cài đặt một gói được xây dựng. Xem tại đây: wheel.readthedocs.org/en/latest . Tuy nhiên kinh nghiệm cá nhân của tôi với bánh xe là có rất ít gói bánh xe khoa học có sẵn mà nó hoàn toàn mang tính học thuật. Và dĩ nhiên, cài đặt pip hầu như không hoạt động trên windows nếu môi trường xây dựng của bạn không được thiết lập chính xác. Vì vậy, tại thời điểm này, conda ftw.
Caleb Hattedh

4
Bánh xe vẫn còn mới và không được sử dụng theo mặc định, vì vậy không có gì đáng ngạc nhiên khi thực sự chưa có nhiều trong số chúng. Mặc dù vậy, Wheel vẫn phù hợp với danh mục "Python cụ thể", có nghĩa là nó có thể không phù hợp với các gói không phải Python hoặc các gói Python phụ thuộc vào các gói không phải Python.
asmeker

4
Tôi đã phải đánh giá thấp điều này: điểm đạn thứ hai bây giờ chỉ là một ghi chú lịch sử, nhưng bạn cũng sẽ tiếp tục sau đó. Sự khác biệt chính ngày nay là pip là một trình quản lý gói trong khi conda là một trình quản lý môi trường.
Cừu

9
Đúng là pip có thể biên dịch từ nguồn nhưng điều này ngày càng ít đi khi có nhiều gói chuyển sang bánh xe: ngày nay tôi có thể cài đặt hầu hết những gì tôi cần trong vài giây với pip. Vì vậy, không phải câu trả lời này là sai, nó chỉ trở nên hơi lỗi thời vì pip đã được cải thiện khá nhiều trong vài năm qua
Shep

4
chưa bao giờ đúng là pip chỉ có thể cài đặt từ nguồn. Trước bánh xe, chúng tôi có trứng là định dạng cài đặt nhị phân mặc định và định dạng phân phối được đề xuất cho cài đặt Windows, và pip sẽ (và vẫn sẽ) cài đặt trứng nếu đó là tùy chọn khả dụng tốt nhất.
Martijn Pieters

96

Các câu trả lời khác đưa ra một mô tả công bằng về các chi tiết, nhưng tôi muốn làm nổi bật một số điểm cấp cao.

Pip là trình quản lý gói hỗ trợ cài đặt, nâng cấp và gỡ cài đặt các gói python . Nó cũng hoạt động với môi trường python ảo .

conda là trình quản lý gói cho mọi phần mềm (cài đặt, nâng cấp và gỡ cài đặt). Nó cũng hoạt động với môi trường hệ thống ảo .

Một trong những mục tiêu với thiết kế conda là tạo điều kiện quản lý gói cho toàn bộ ngăn xếp phần mềm theo yêu cầu của người dùng, trong đó một hoặc nhiều phiên bản python chỉ có thể là một phần nhỏ. Điều này bao gồm các thư viện cấp thấp, chẳng hạn như đại số tuyến tính, trình biên dịch, chẳng hạn như mingw trên Windows, trình soạn thảo, công cụ kiểm soát phiên bản như Hg và Git hoặc bất kỳ thứ gì khác yêu cầu phân phối và quản lý .

Để quản lý phiên bản, pip cho phép bạn chuyển đổi giữa và quản lý nhiều môi trường python .

Conda cho phép bạn chuyển đổi giữa và quản lý nhiều môi trường có mục đích chung mà qua đó nhiều thứ khác có thể khác nhau về số phiên bản, như thư viện C, hoặc trình biên dịch, hoặc bộ kiểm thử hoặc công cụ cơ sở dữ liệu, v.v.

Conda không phải là trung tâm của Windows, nhưng trên Windows, đây là giải pháp ưu việt hiện có khi các gói khoa học phức tạp yêu cầu biên dịch được yêu cầu phải được cài đặt và quản lý.

Tôi muốn khóc khi nghĩ về việc tôi đã mất bao nhiêu thời gian khi cố gắng biên dịch nhiều gói này qua pip trên Windows hoặc gỡ lỗi pip installcác phiên không thành công khi yêu cầu biên dịch.

Như một điểm cuối cùng, Continuum Analytics cũng lưu trữ (miễn phí) binstar.org (hiện được gọi là anaconda.org ) để cho phép các nhà phát triển gói thông thường tạo ra các ngăn xếp phần mềm tùy chỉnh (được xây dựng!) Mà người dùng gói của họ có thể conda installtừ đó.


4
Theo điểm cuối cùng của bạn, dự án conda-forge của bên thứ ba đã nhanh chóng trở thành phương pháp tiếp cận tiêu chuẩn công nghiệp để xuất bản các gói Anaconda. Chúng tôi vừa mới công bố một số conda-rèn-tổ chức gói cho mô phỏng đa môi trường sinh học của chúng tôi - và không thể khuyên bạn quá trình đủ. Có một thành phần đánh giá ngang hàng dựa trên PR GitHub để gửi công thức nấu ăn mới cho conda-forge, nhưng những lợi thế về tự động hóa conda-forge vượt xa đầu tư thời gian trước. Bế!
Cecil Curry

@CecilCurry Tôi đã nhập Kerasmã của mình, đã cài đặt anaconda trên máy Mac và Keras của tôi đều condađược cài đặt và pipcài đặt. Vì vậy, khi chạy mã của tôi trong thiết bị đầu cuối, làm thế nào để tôi biết cái nào kerasđang được nhập ( pipcái này hay cái condakia)?
KPMG

25

Không làm bạn bối rối hơn nữa, nhưng bạn cũng có thể sử dụng pip trong môi trường conda của mình, điều này xác nhận các nhận xét chung của người quản lý cụ thể so với python ở trên.

conda install -n testenv pip
source activate testenv
pip <pip command>

bạn cũng có thể thêm pip vào các gói mặc định của bất kỳ môi trường nào để nó có mặt mỗi lần để bạn không phải tuân theo đoạn trích trên.


Tôi nghĩ rằng điều này không được khuyến khích?
endolith

8
Chúng tôi khuyên bạn nên sử dụng pip bên trong conda. Tốt hơn hết là cài đặt bằng conda, nhưng đối với bất kỳ gói nào không có bản dựng conda, việc sử dụng pip là hoàn toàn chấp nhận được.
Bradley Kreider

2
nit: có vẻ như cụm từ sẽ là fully supported? fully recommendedngụ ý, tốt hơn để sử dụng pip hơn conda, trong một môi trường conda, theo suy nghĩ của tôi, một thứ tôi không chắc đó là ý nghĩa của bạn / họ?
Hugh Perkins

22

Trích dẫn từ bài viết của Conda cho Khoa học dữ liệu trên trang web của Continuum:

Conda vs pip

Các lập trình viên Python có thể quen thuộc với pip để tải các gói từ PyPI và quản lý các yêu cầu của họ. Mặc dù, cả conda và pip đều là trình quản lý gói, chúng rất khác nhau:

  • Pip dành riêng cho các gói Python và conda không liên quan đến ngôn ngữ, có nghĩa là chúng ta có thể sử dụng conda để quản lý các gói từ bất kỳ ngôn ngữ nào Pip biên dịch từ nguồn và conda cài đặt nhị phân, loại bỏ gánh nặng biên dịch
  • Conda tạo ra các môi trường không biết ngôn ngữ một cách tự nhiên trong khi pip chỉ dựa vào virtualenv để quản lý các môi trường Python Mặc dù luôn khuyến nghị sử dụng các gói conda, conda cũng bao gồm pip, vì vậy bạn không phải chọn giữa hai. Ví dụ: để cài đặt gói python không có gói conda, nhưng có sẵn thông qua pip, chỉ cần chạy, ví dụ:
conda install pip
pip install gensim

15

Trích dẫn từ Conda: Huyền thoại và quan niệm sai lầm (một mô tả toàn diện):

...

Chuyện hoang đường số 3: Conda và pip là đối thủ cạnh tranh trực tiếp

Thực tế: Conda và pip phục vụ các mục đích khác nhau và chỉ cạnh tranh trực tiếp trong một tập hợp nhỏ các nhiệm vụ: cụ thể là cài đặt các gói Python trong môi trường bị cô lập.

Pip, viết tắt của P ip I nstalls P ackages, là trình quản lý gói bị xử phạt chính thức của Python và thường được sử dụng nhất để cài đặt các gói được xuất bản trên Python Pack Index (PyPI). Cả pip và PyPI đều được quản lý và hỗ trợ bởi Cơ quan đóng gói Python (PyPA).

Nói tóm lại, pip là trình quản lý mục đích chung cho các gói Python; conda là một nhà quản lý môi trường đa nền tảng ngôn ngữ. Đối với người dùng, sự khác biệt nổi bật nhất có lẽ là thế này: pip cài đặt các gói python trong bất kỳ môi trường nào; conda cài đặt bất kỳ gói trong môi trường conda. Nếu tất cả những gì bạn đang làm là cài đặt các gói Python trong một môi trường biệt lập, conda và pip + virtualenv hầu hết có thể hoán đổi cho nhau, modulo một số khác biệt trong xử lý phụ thuộc và tính sẵn sàng của gói. Theo môi trường biệt lập, tôi có nghĩa là một conda-env hoặc virtualenv, trong đó bạn có thể cài đặt các gói mà không cần sửa đổi cài đặt Python hệ thống của bạn.

Thậm chí đặt sang một bên Huyền thoại số 2, nếu chúng ta chỉ tập trung vào việc cài đặt các gói Python, conda và pip phục vụ các đối tượng khác nhau và các mục đích khác nhau. Nếu bạn muốn, giả sử, quản lý các gói Python trong cài đặt Python hệ thống hiện có, thì conda không thể giúp bạn: theo thiết kế, nó chỉ có thể cài đặt các gói trong môi trường conda. Nếu bạn muốn, giả sử, làm việc với nhiều gói Python dựa trên các phụ thuộc bên ngoài (NumPy, SciPy và Matplotlib là các ví dụ phổ biến), trong khi theo dõi các phụ thuộc đó theo cách có ý nghĩa, pip không thể giúp bạn: theo thiết kế, nó quản lý các gói Python và chỉ các gói Python.

Conda và pip không phải là đối thủ cạnh tranh, mà là các công cụ tập trung vào các nhóm người dùng và mô hình sử dụng khác nhau.


1
Tôi không chắc điều này thực sự đúng, ngoài quan điểm định vị thị trường. Ví dụ, hãy xem pytorch, cung cấp ba loại cài đặt: conda, pip, source, pytorch.org và khuyến nghị: conda
Hugh Perkins

2
"Cài đặt các gói Python trong môi trường biệt lập" là loại điều chính mà hầu hết các nhà phát triển Python sử dụng pip cho.
Nick

@Nick không phải là khi nhà phát triển đã ở trong môi trường ảo 'đó'? Tôi nghĩ rằng pip hoạt động trong môi trường ảo và cài đặt gói như thể nó đang cài đặt cho một hệ thống. Nhưng như sanchos.s đã nói, nó chỉ cài đặt các gói python và không quan tâm đến các thư viện bên dưới. bất cứ ai xin vui lòng sửa cho tôi nếu tôi sai.
Chân Kim

12

Dành cho người dùng WINDOWS

Tình hình công cụ đóng gói "tiêu chuẩn" đang được cải thiện gần đây:

  • trên pypi, hiện có 48% gói bánh xe. Ngày 11 tháng 11 năm 2015 (tăng từ 38% trong tháng 5 năm 2015, 24% trong năm 2014),

  • định dạng bánh xe hiện được hỗ trợ ngoài hộp cho mỗi con trăn mới nhất 2.7.9,

Tình hình công cụ đóng gói "tiêu chuẩn" + "điều chỉnh" cũng được cải thiện:

  • bạn có thể tìm thấy gần như tất cả các gói khoa học về định dạng bánh xe tại http://www.lfd.uci.edu/~gohlke/pythonlibs ,

  • dự án mingwpy có thể mang đến một ngày một gói 'tổng hợp' cho người dùng windows, cho phép cài đặt mọi thứ từ nguồn khi cần.

Bao bì "Conda" vẫn tốt hơn cho thị trường mà nó phục vụ và làm nổi bật các khu vực nơi "tiêu chuẩn" cần cải thiện.

.


8

pip là một người quản lý gói.

conda vừa là người quản lý gói vừa là người quản lý môi trường.

Chi tiết:

nhập mô tả hình ảnh ở đây

Người giới thiệu


2

Tôi có thể sử dụng pip để cài đặt iPython không?

Chắc chắn, cả hai (cách tiếp cận đầu tiên trên trang)

pip install ipython

và (cách tiếp cận thứ ba, thứ hai là conda)

Bạn có thể tải xuống IPython theo cách thủ công từ GitHub hoặc PyPI. Để cài đặt một trong những phiên bản này, hãy giải nén nó và chạy phần sau từ thư mục nguồn cấp cao nhất bằng Terminal:

pip install .

những cách chính thức được đề nghị để cài đặt .

Tại sao tôi nên sử dụng conda như một trình quản lý gói python khác khi tôi đã có pip?

Như đã nói ở đây :

Nếu bạn cần một gói cụ thể, có thể chỉ cho một dự án hoặc nếu bạn cần chia sẻ dự án với người khác, thì conda có vẻ phù hợp hơn.

Conda vượt qua pip trong ( YMMV )

  • các dự án sử dụng các công cụ không phải python
  • chia sẻ với đồng nghiệp
  • chuyển đổi giữa các phiên bản
  • chuyển đổi giữa các dự án với các phiên bản thư viện khác nhau

Sự khác biệt giữa pip và conda là gì?

Điều đó được trả lời rộng rãi bởi những người khác.


1

pip chỉ dành cho Python

condachỉ dành cho Anaconda + các gói khoa học khác như phụ thuộc R, v.v. KHÔNG phải ai cũng cần Anaconda đi kèm với Python. Anaconda chủ yếu dành cho những người học Machine / học sâu, v.v. Người dùng Python thông thường sẽ không chạy Anaconda trên máy tính xách tay của mình.


giải thích đơn giản, nhưng tôi được dạy trực tiếp đến trang web của Anaconda và tải xuống bản phân phối Python 2.x hoặc 3.x. Tại sao? > bởi vì nó chứa tất cả các gói mà học sinh sẽ cần. Numpy, Scipy, matpliotlib, sklearn, v.v ... Đây chính xác là lý do tại sao có một khoảng cách trong việc hiểu các chi tiết cơ bản tốt hơn. Sinh viên
Rene Duchamp

Tôi biết đây là một câu trả lời cũ vào thời điểm này, nhưng những gì bạn đã viết về Conda / Anaconda dường như hoàn toàn sai đối với tôi.
AMC

0

Tôi có thể đã tìm thấy một sự khác biệt nữa của một bản chất nhỏ. Tôi có môi trường trăn của tôi dưới /usrchứ không phải /homehoặc bất cứ điều gì. Để cài đặt nó, tôi sẽ phải sử dụng sudo install pip. Đối với tôi, tác dụng phụ không mong muốn của sudo install piphơi khác so với những gì được báo cáo rộng rãi ở nơi khác: sau khi làm như vậy, tôi phải chạy pythonvới sudođể nhập bất kỳ sudogói nào được cài đặt. Tôi đã từ bỏ điều đó và cuối cùng thấy rằng tôi có thể sử dụng sudo condađể cài đặt các gói vào một môi trường /usrmà sau đó được nhập bình thường mà không cần sự sudocho phép python. Tôi thậm chí đã sử dụng sudo condađể sửa chữa một hỏng piphơn là sử dụng sudo pip uninstall piphoặc sudo pip --upgrade install pip.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.