2013-10-30 21 views
21

Khi cài đặt lại gói sử dụng Cabal, thường thấy cảnh báo này:Tại sao cabal reinstalls "luôn nguy hiểm"?

Cảnh báo: Lưu ý rằng cài đặt lại luôn nguy hiểm. Vẫn tiếp tục ...

Một số lý do đằng sau thông báo này là gì?

+5

[SICP] (http://www.vex.net/~trebla/haskell/sicp.xhtml), câu trả lời chính tắc (đặc biệt là phần trên con chim bồ câu thả). –

+2

Ngoài ra thực tế là bạn nhận được cảnh báo này "", trong khi nó đang làm/thực hiện cài đặt lại anyway. –

+0

Và điều gì nói với tôi rằng nó nguy hiểm nếu bạn không cho tôi một tùy chọn để thực sự chú ý đến cảnh báo và hủy bỏ nó? – flarn2006

Trả lời

16

Hiện tại, cài đặt lại gói có nghĩa là hủy ghi đè gói đã được cài đặt. Nếu gói cũ đó có bất kỳ phụ thuộc ngược nào trên hệ thống, chúng sẽ không hoạt động nữa.

Để thực hiện điều này ít khả năng, cabal-install kiểm tra cơ sở dữ liệu gói mà nó có quyền truy cập khi được gọi cho các phụ thuộc ngược đó và liệt kê chúng. Trong tình huống này, nó yêu cầu --force-reinstalls để tiếp tục. Nhưng ngay cả khi không có phụ thuộc ngược lại có thể được tìm thấy, nó không có nghĩa là không có. Có thể có cơ sở dữ liệu gói bổ sung ở nơi khác trên hệ thống (ví dụ, nhiều cơ sở dữ liệu người dùng) hoặc thư mục dự án đã được cấu hình dựa vào phiên bản cũ của gói được ghi đè. Không có cách nào cho cabal-install là hoàn toàn chắc chắn, đó là lý do tại sao nó cảnh báo rằng reinstalls luôn luôn nguy hiểm.

+2

Các cài đặt lại luôn nguy hiểm trong hộp cát? –

+3

@SeanLeather Không hoàn toàn nguy hiểm, vì vậy có lẽ đầu ra của 'cabal-install' nên được tinh chỉnh một chút. Một cài đặt lại trong một sandbox vẫn có thể phá vỡ các gói sử dụng sandbox (và sandbox có thể được chia sẻ giữa một số dự án, mặc dù đó không phải là tất cả những gì phổ biến). Nhưng nó ít nhất có thể không phá vỡ bất cứ điều gì mà không sử dụng sandbox. – kosmikus

+0

Vì vậy, đó là một vấn đề quy mô sau đó. Vấn đề vẫn còn đó; nó chỉ là thiệt hại được chứa. Và bạn có thể xóa sandbox nếu một vấn đề xảy ra, trong khi cơ sở dữ liệu gói toàn cục có vấn đề hơn. Đối với việc chia sẻ một sandbox trên các gói, chúng tôi đang làm điều đó. Tôi không chắc nó phổ biến như thế nào. –

Các vấn đề liên quan