Có nên sử dụng conda, hoặc conda-forge cho môi trường Python?


127

Condaconda-forgelà cả hai trình quản lý gói Python. Sự lựa chọn thích hợp khi một gói tồn tại trong cả hai kho là gì? Django, ví dụ, có thể được cài đặt với một trong hai, nhưng sự khác biệt giữa hai là một số phụ thuộc (conda-forge có nhiều hơn nữa). Không có lời giải thích cho những khác biệt này, thậm chí không phải là một README đơn giản.

Nên dùng cái nào? Conda hay conda-forge? Có vấn đề gì không?


5
"Conda và conda-forge đều là trình quản lý gói Python." Tôi không nghĩ đó là sự thật. Tôi không nghĩ rằng những thứ đó thậm chí trong cùng một loại. condalà một người quản lý gói và conda-forgelà một kênh. Có lẽ đó là sự thật khi câu hỏi này được hỏi?
endolith

Câu trả lời:


200

Câu trả lời ngắn gọn là, theo kinh nghiệm của tôi nói chung, không quan trọng bạn sử dụng cái gì.

Câu trả lời dài:

Vì vậy, conda-forgemột kênh bổ sung mà từ đó các gói có thể được cài đặt. Theo nghĩa này, nó không đặc biệt hơn kênh mặc định hoặc bất kỳ kênh nào trong số hàng trăm (hàng nghìn?) Kênh khác mà mọi người đã đăng gói. Bạn có thể thêm kênh của riêng mình nếu bạn đăng ký tại https://anaconda.org và tải lên các gói Conda của riêng bạn.

Ở đây chúng ta cần phân biệt, điều mà tôi nghĩ rằng bạn không rõ về cụm từ của bạn trong câu hỏi, giữa conda, trình quản lý gói đa nền tảng và conda-forgekênh gói. Anaconda Inc. (trước đây là Continuum IO), nhà phát triển chính của condaphần mềm, cũng duy trì một kênh gói riêng, là mặc định khi bạn nhập conda install packagenamemà không thay đổi bất kỳ tùy chọn nào.

Có ba cách để thay đổi các tùy chọn cho các kênh. Hai cái đầu tiên được thực hiện mỗi khi bạn cài đặt một gói và cái cuối cùng là liên tục. Đầu tiên là chỉ định kênh mỗi khi bạn cài đặt gói:

conda install -c some-channel packagename

Tất nhiên, gói phải tồn tại trên kênh đó. Cách này sẽ cài đặt packagenamevà tất cả các phụ thuộc của nó từ some-channel. Thay phiên, bạn có thể chỉ định:

conda install some-channel::packagename

Gói vẫn phải tồn tại some-channel, nhưng bây giờ, chỉ packagenamesẽ được kéo từ some-channel. Bất kỳ gói nào khác cần thiết để đáp ứng phụ thuộc sẽ được tìm kiếm từ danh sách kênh mặc định của bạn.

Để xem cấu hình kênh của bạn, bạn có thể viết:

conda config --show channels

Bạn có thể kiểm soát thứ tự mà các kênh được tìm kiếm conda config. Bạn có thể viết:

conda config --add channels some-channel

để thêm kênh some-channelvào đầu channelsdanh sách cấu hình. Điều này cho some-channelưu tiên cao nhất. Ưu tiên xác định ( một phần ) kênh nào được chọn khi có nhiều kênh có một gói cụ thể. Để thêm kênh vào cuối danh sách và ưu tiên thấp nhất, hãy nhập

conda config --append channels some-channel

Nếu bạn muốn xóa kênh mà bạn đã thêm, bạn có thể làm như vậy bằng cách viết

conda config --remove channels some-channel

Xem

conda config -h

để có thêm lựa chọn.

Với tất cả những gì đã nói, có bốn lý do chính để sử dụng conda-forgekênh thay vì defaultskênh được duy trì bởi Anaconda:

  1. Các gói trên conda-forge có thể cập nhật hơn các gói trên defaultskênh
  2. Có các gói trên conda-forgekênh không có sẵn từdefaults
  3. Bạn muốn sử dụng một phụ thuộc như openblas(từ conda-forge) thay vì mkl(từ defaults).
  4. Nếu bạn đang cài đặt gói yêu cầu thư viện đã biên dịch (ví dụ: tiện ích mở rộng C hoặc trình bao bọc xung quanh thư viện C), nó có thể giảm khả năng không tương thích nếu bạn cài đặt tất cả các gói trong môi trường từ một kênh do nhị phân khả năng tương thích của thư viện C cơ sở (nhưng lời khuyên này có thể đã hết hạn / thay đổi trong tương lai).

1
Cảm ơn! Tôi có hai câu hỏi liên quan: 1. làm thế nào tôi có thể tìm ra kênh nào tốt để thử và; 2. sau khi tôi định cấu hình trên một kênh, làm cách nào tôi có thể đặt lại về mặc định?
Daniel

1
@Kenny Để trả lời câu hỏi đầu tiên của bạn, bạn nên tìm kiếm gói bạn muốn trên anaconda.org và xem kênh nào có gói đó. Tôi chỉnh sửa câu trả lời để trả lời câu hỏi thứ hai của bạn. Tuy nhiên, tôi cũng lưu ý rằng nếu bạn muốn cài đặt một gói duy nhất từ ​​một kênh, có thể sử dụng conda install -c some-channel packagenamecách viết lệnh dễ dàng hơn
darthbith

điều đó thật tuyệt! Có một so sánh có sẵn giữa conda-forge và conda về # mô-đun được hỗ trợ, độ tươi, độ bao phủ vv?
Rutger Hofste

1
Không mklnhanh hơn openblasà?
endolith

3
@endolith Có thể, nhưng 1) chỉ có thể trên bộ xử lý Intel và 2) nó không phải là nguồn mở
darthbith

4

Anaconda đã thay đổi Điều khoản dịch vụ của họ để "người dùng thương mại nặng" phải trả tiền, không bao gồm conda-forgekênh.

Bạn có thể muốn dính vào conda-forgenếu bạn không muốn trả tiền cho việc sử dụng. Như đã nêu trong các tài liệu :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Bạn cũng có thể sử dụng miniforgeconda-forgekênh mặc định và hỗ trợ các nền tảng ppc64le và aarch64 cũng như các nền tảng thông thường khác.


3

Kênh conda-forge là nơi bạn có thể tìm thấy các gói đã được xây dựng cho conda nhưng chưa phải là một phần của bản phân phối Anaconda chính thức.

Nói chung, bạn có thể sử dụng bất kỳ trong số họ.


1

Có một số thư viện Python mà bạn không thể cài đặt với một đơn giản conda installtừ kênh của họ không có sẵn trừ khi bạn áp dụng conda-rèn. Từ kinh nghiệm của tôi, pip là chung chung để xem xét các nguồn kênh khác nhau hơn là conda. Ví dụ, nếu bạn muốn cài đặt, python-constraintbạn có thể thực hiện thông qua pip installnhưng để cài đặt qua ** cond **. bạn phải chỉ định kênh - conda-forge.

conda install -c conda-forge python-constraint // works

nhưng không

conda install python-constraint

Câu trả lời khó hiểu. Cài đặt pip đưa gói bên ngoài quản lý gói phụ thuộc và xác minh phụ thuộc của conda, có nghĩa là bạn cần quản lý gói đó (và có khả năng phụ thuộc) theo cách thủ công và các lệnh như conda update --allsẽ không cập nhật gói cài đặt pip
Jean Monet
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.