Tôi giải thích rất nhiều điều này trong số SciPy 2014 talk của mình. Hãy để tôi đưa ra một phác thảo nhỏ ở đây.
Trước hết, gói conda thực sự đơn giản. Nó chỉ là một tarball của các tập tin được cài đặt, cùng với một số siêu dữ liệu trong một thư mục info
. Ví dụ gói conda cho python
là một tarball của các tập tin
info/
files
index.json
...
bin/
python
...
lib/
libpython.so
python2.7/
...
...
...
Bạn có thể thấy chính xác những gì nó trông giống như bằng cách nhìn vào các gói chiết xuất trong thư mục Anaconda pkgs
. Thông số đầy đủ là http://conda.pydata.org/docs/spec.html.
Khi điều kiện cài đặt này, nó trích xuất tarball vào thư mục pkgs
và liên kết chặt chẽ các tệp vào môi trường cài đặt. Cuối cùng, một số tệp có một số đường dẫn cài đặt được mã hóa cứng có thay thế này (thường là các dòng shebang).
Về cơ bản là nó. Có một số thứ khác xảy ra về độ phân giải phụ thuộc, nhưng một khi nó biết những gì gói của nó sẽ cài đặt đó là cách nó thực hiện nó.
Quá trình xây dựng một gói phức tạp hơn một chút. @ Mattexx của câu trả lời và tài liệu nó liên kết để mô tả một chút về cách kinh điển của việc xây dựng một gói bằng cách sử dụng xây dựng conda.
Để trả lời các câu hỏi khác của bạn:
Hơn nữa, vì nó là trăn thuyết bất khả tri và dường như làm việc rất tốt và thành thạo, tại sao nó không được sử dụng như một nhà quản lý gói tin tổng hợp như apt hoặc yum?
Bạn chắc chắn có thể. Điều duy nhất hạn chế đây là tập hợp các gói đã được xây dựng cho conda. Trên Windows, đây là một lựa chọn rất hay, vì không có bất kỳ trình quản lý gói hệ thống nào giống như trên Linux.
Những hạn chế chỉ sử dụng conda làm người quản lý gói là gì? Nó có hoạt động không?
Nó sẽ hoạt động, giả sử bạn có gói conda cho mọi thứ bạn quan tâm.Hạn chế chính là conda chỉ muốn cài đặt mọi thứ vào môi trường conda, vì vậy những thứ yêu cầu vị trí cài đặt cụ thể trên hệ thống có thể không phù hợp với conda (mặc dù vẫn có thể thực hiện được nếu bạn đặt vị trí đó làm đường dẫn môi trường) . Hoặc ví dụ, conda có thể không phải là một sự thay thế phù hợp cho các nhà quản lý gói "cấp dự án" như bower.
Ngoài ra, có thể không nên sử dụng conda để quản lý thư viện cấp hệ thống (thư viện phải được cài đặt trong tiền tố /
), như phần mở rộng hạt nhân hoặc hạt nhân, trừ khi bạn xây dựng phân phối sử dụng dấu mũ một người quản lý gói một cách rõ ràng.
Điều chính tôi nói những điều này là các gói conda thường được tạo thành relocatable, có nghĩa là tiền tố cài đặt của gói không quan trọng. Đây là lý do tại sao đường dẫn mã hóa cứng được thay đổi như một phần của quá trình cài đặt, ví dụ. Nó cũng có nghĩa là thư viện động được xây dựng với xây dựng conda sẽ có RPATHs của họ (trên Linux) và cài đặt tên (trên OS X) thay đổi tự động để sử dụng đường dẫn tương đối thay vì các đường dẫn tuyệt đối.
Hoặc cách khác vòng, tại sao ví dụ: apt và yum không thể cung cấp các chức năng mà conda cung cấp? Là conda "tốt hơn" so với những người quản lý gói hoặc chỉ khác nhau?
Bằng một số cách, điều đó tốt hơn và theo một số cách thì không. Trình quản lý gói hệ thống của bạn biết hệ thống của bạn, và có các gói trong đó sẽ không ở trong tình trạng hỗn loạn (và một số, giống như hạt nhân, có lẽ không nên ở trong tình trạng hỗn loạn).
Ưu điểm chính của conda là khái niệm môi trường. Vì các gói được tạo để có thể định vị lại, bạn có thể cài đặt cùng một gói ở nhiều nơi và có hiệu quả cài đặt hoàn toàn độc lập mọi thứ, về cơ bản là miễn phí.
Liệu nó sử dụng một số loại Containerization
Không, chỉ "Containerization" là có cài đặt thư mục riêng biệt và làm bao bì định vị.
hoặc liên kết tĩnh của tất cả các phụ thuộc,
Các phụ thuộc liên kết là hoàn toàn tùy thuộc vào gói riêng của mình. Một số gói liên kết tĩnh phụ thuộc của họ, một số không. Các thư viện được liên kết động có đường dẫn tải thay đổi như tôi đã mô tả ở trên để có thể định vị lại.
tại sao lại có "nền tảng chéo"?
"Nền tảng chéo" trong trường hợp này có nghĩa là "hệ điều hành chéo". Mặc dù cùng một gói nhị phân không thể hoạt động trên OS X, Linux và Windows, điểm chính là bản thân conda hoạt động giống nhau trên cả ba, vì vậy nếu bạn có cùng một gói được xây dựng cho cả ba nền tảng, bạn có thể quản lý chúng giống nhau bất kể bạn đang ở đâu.
Đây là một câu hỏi khá rộng. Bạn quan tâm đến hoạt động nội bộ nào? – vicvicvic
Liệu nó có sử dụng một số loại container, hoặc liên kết tĩnh của tất cả các phụ thuộc, tại sao nó là "nền tảng chéo"? Ví dụ, bất cứ ai từng cố gắng cài đặt một cách numpy biết, những gì làm việc trên debian, không hoạt động nhất thiết trên ubuntu ... – user27564