Sự khác biệt giữa cài đặt apt-get và apt-get build-dep là gì?


33

Trên trang apt-get man , người ta có thể tìm thấy điều này:

cài đặt pkg (s)
Tùy chọn này được theo sau bởi một hoặc nhiều gói mong muốn để cài đặt. Mỗi gói là một tên gói, không phải là tên tệp đủ điều kiện (ví dụ: trong hệ thống Fedora Core, glibc sẽ là đối số được cung cấp, không phải là glibc-2.4.8.i686.rpm).
Tất cả các gói được yêu cầu bởi (các) gói được chỉ định để cài đặt cũng sẽ được truy xuất và cài đặt .
[...]

build-dep source_pkg
Gây ra apt-get để cài đặt / gỡ bỏ các gói trong nỗ lực đáp ứng các phụ thuộc xây dựng cho gói nguồn.

Nghe có vẻ như cả hai đang cố gắng thỏa mãn sự phụ thuộc, nhưng tôi đã có kết quả khác nhau trong khi cài đặtmatplotlib với từng thứ đó: apt-get intallkhông hoạt động với phần tiếp theo pip install matplotlibcủa tôi trong virtualenv của tôi, trong khi apt-get build-dep*.

*Vâng, tôi cần phải cài đặt matplotlibtrong một venv, nhưng pip không thể giải quyết một số phụ thuộc, vì vậy tôi lười biếng sử dụng apt để giải quyết nó

Câu trả lời:


39

Phiên bản ngắn.

apt-get install

cài đặt gói mới, tự động giải quyết và tải xuống các gói phụ thuộc. Nếu gói được cài đặt thì hãy thử nâng cấp lên phiên bản mới nhất.

apt-get build-dep

Nguyên nhân apt-get để cài đặt / gỡ bỏ các gói trong nỗ lực đáp ứng các phụ thuộc xây dựng cho gói nguồn.

Lệnh này sudo apt-get build-dep packagenamecó nghĩa là cài đặt tất cả các phụ thuộc cho 'packagename' để tôi có thể xây dựng nó ". Vì vậy, build-dep là một lệnh apt-get giống như cài đặt, gỡ bỏ, cập nhật, v.v.

Các build-deplệnh tìm kiếm các kho địa phương trong hệ thống và cài đặt phần xây dựng phụ thuộc gói. Nếu gói không tồn tại trong kho lưu trữ cục bộ, nó sẽ trả về mã lỗi.

Để cài đặt matplotlib, xem phần Cài đặt matplotlib trên Ubuntu

Nguồn: ManPage & Ravi Saive


19

Sự khác biệt là liệu các phụ thuộc có cần thiết trong thời gian chạy trái ngược với thời gian xây dựng hay không .

Ví dụ, có thể tôi đang xây dựng một nhị phân sử dụng openssl. Tại thời điểm xây dựng, tôi sẽ cần các tệp tiêu đề openssl, trong đó libssl-dev. Sau đó tôi sẽ liệt kê này là một Build-Depends.

Tuy nhiên, kết quả nhị phân và gói không cần tiêu đề và các tệp phát triển khác, vì vậy tại thời điểm cài đặt tôi không cần libssl-dev. Nó sẽ không ở trong Dependsđó. Nhưng libssl, thư viện thời gian chạy nhị phân của tôi được liên kết với, sẽ cần phải ở trong Depends.

Các phần con người bạn trích dẫn chỉ ra điều này (nó nói về "thỏa mãn các phụ thuộc xây dựng " của gói), nhưng không có kiến ​​thức trước về thời điểm Build-Depends được sử dụng, điều này có thể gây nhầm lẫn.

Hãy xem hướng dẫn chính sách Debian để biết định nghĩa về các trường tệp điều khiển:

http://www.debian.org/doc/debian-policy/ch-controlfields.html

đây là phần về Build-Depends. Lưu ý rằng dưới tiêu đề "phụ thuộc cho gói nguồn ":

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-sourcebinarydeps

Và điều này nói về Depends. Lưu ý 'dưới tiêu đề gói nhị phân :

http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps


Cảm ơn. Có vẻ như tôi sẽ cần xây dựng dep để xây dựng thư viện từ nguồn .. theo mô tả của bạn.
kchoi
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.