Làm thế nào để emacs quản lý các gói của nó?


9

Tôi đã cài đặt auctex từ trung tâm phần mềm của Ubuntu và sau đó tôi đã cài đặt phiên bản mới hơn của auctex từ emacs.

Sau đó tôi đã gỡ cài đặt auctex được cài đặt bởi trung tâm phần mềm của Ubuntu. Tôi thấy rằng nó đã không gỡ cài đặt cái tôi đã cài đặt từ emacs.

Làm thế nào để emacs quản lý các gói của nó?

Có sự can thiệp nào giữa emacs và Ubuntu trong việc quản lý cài đặt và gỡ cài đặt các gói emacs không?

Nếu tôi đúng, một vài năm trước, không có cách nào để cài đặt các gói trong emacs?

Cảm ơn.


2
IMO, câu hỏi này quá rộng cho SE Q & A. Tốt hơn là đọc tài liệu Emacs, và sau đó đăng lên đây một câu hỏi cụ thể về một phần cụ thể của quản lý gói không rõ ràng với bạn. Chúng ta không nên sao chép tài liệu Emacs ở đây. Và nếu có một cái gì đó quan trọng bị thiếu trong tài liệu Emacs thì bạn nên gửi báo cáo lỗi / yêu cầu nâng cao : M-x report-emacs-bug. Những người trả lời một câu hỏi như vậy ở đây sẽ tốt hơn nếu đóng góp cho các tài liệu của Emacs, nếu thông tin bị thiếu. IMHO.
vẽ

3
Tim: Chỉ trong trường hợp có bất kỳ sự nhầm lẫn nào, "gói" Emacs và "gói" Ubuntu / Debian là những thứ hoàn toàn không liên quan. Bất kỳ gói Debian nào liên quan đến Emacs đều không có kết nối nào với trình quản lý gói.el được tích hợp trong Emacs 24.
phils

1
@Tim, Đừng quên chấp nhận ananswer hoặc cho chúng tôi biết nếu câu trả lời không thỏa đáng.
Malabarba

1
@Drew Câu hỏi liên quan nhiều hơn đến sự tương tác giữa các gói Ubuntu và Emacs, vì vậy sẽ không được đề cập trong các tài liệu của Emacs. Và câu trả lời cũng thảo luận về các gói của bên thứ ba mà các tài liệu không đề cập đến, vì vậy đây có lẽ là nơi tốt nhất để hỏi những điều như vậy.
Brian Burns

Câu trả lời:


11

Như paprika đã nói, Emacs sử dụng load-pathđể tìm kiếm danh sách elispcác tệp có sẵn ( .elc, .el)

Các load-pathđang tìm kiếm các gói phù hợp đầu tiên khi nó đang được yêu cầu. Nếu nhiều bản sao của một gói được cài đặt, thì bản đầu tiên sẽ được tải.

Trình quản lý gói distro không thể cài đặt vào cùng một nguồn như package-installvậy, vì một là toàn hệ thống và một là dành riêng cho người dùng.

Nguồn gói

Được xây dựng và phân phối cụ thể

Quản lý gói Distro

Trình quản lý gói Distro cung cấp một lựa chọn các gói emacs có thể được cài đặt. Theo kinh nghiệm của tôi, những thứ này thường nằm trong số các gói phổ biến hơn / được sử dụng rộng rãi. Trước khi phát triển, package.elđây là cách dễ nhất để có được các gói. (Dễ nhất là do chỉ chạy thay apt-get install <package>vì sử dụng kiểm soát phiên bản hoặc tải xuống trực tiếp.

Các gói được cài đặt thông qua trình quản lý gói distro được cài đặt /usr/local/share/emacs/site-lisp/mặc định trong load-pathvà sẽ bị ẩn bởi các load-pathbổ sung dành riêng cho người dùng .

Gói.el

package.ellần đầu tiên được bao gồm với Emacs 24. Phiên bản này tương thích với Emacs 23nhưng cần phải được cài đặt thủ công, các gói được truy xuất bởi nó có thể hoặc không thể tương thích Emacs 23.

package.elcung cấp một kho chứa các gói có thể duyệt được cho Emacs. Theo mặc định, chỉ có Elpakho lưu trữ được cấu hình, nhưng có thể thêm quyền truy cập vào MELPAMarmelade :

(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))

Điều này cung cấp quyền truy cập vào một nhóm các gói lớn hơn nhiều.

Theo mặc định, package.elcài đặt các gói đến ~/.emacs.d/elpavà khi (package-initialize)được gọi là thư mục này sẽ được đặt gần phía trước hơn load-path, dẫn đến các gói này được ưu tiên hơn các gói được cài đặt bởi trình quản lý gói phân phối.

Git / Bzr / hg / ... + EmacsWiki

Các gói được kiểm soát phiên bản có thể được truy xuất thủ công từ kho lưu trữ của chúng thông qua nhân bản. Một số cũng cung cấp các bản phát hành đóng gói có thể được tải xuống trực tiếp.

EmacsWiki Elisp cũng có thể được tải xuống, mặc dù chúng thường là các tệp đơn hơn là thư mục.

Khi gói được lấy, đảm bảo rằng thư mục đích nằm trên của bạn load-pathvà nó sẽ có sẵn để sử dụng.

Quản lý gói bên thứ 3

Các công cụ này cung cấp trình bao bọc hoặc chức năng bổ sung ở trên để tập trung quản lý gói. Chúng được thiết kế với cấu hình chia sẻ trong tâm trí để đảm bảo tất cả các máy của bạn đều có sẵn các gói giống nhau.

El-Get

El-Nhận duy trì một danh sách các công thức nấu ăn cho phép nó để lấy các gói sử dụng package.el, git, emacswikinhư nguồn (trong số những người khác). Nó cũng cung cấp các chức năng để đảm bảo các gói được cập nhật, quản lý tải (hoãn lại hoặc ngay lập tức) và lưu trữ tùy chỉnh theo gói cụ thể trong các tệp được tải tự động khi gói required.

Cask

Cask được thiết kế để quản lý dự án trong / cho Emacs. Nó sử dụng một casktệp để duy trì một danh sách các phụ thuộc (các gói khác) cần thiết để sử dụng gói và sẽ tải xuống các gói bị thiếu để đảm bảo mọi thứ được tải thành công.

Nó có thể được sử dụng để quản lý các cấu hình gói cục bộ bằng cách coi bạn ~/.emacs.dlà một dự án và kêu gọi (cask-initialize)khởi động.

straight.el

straight.elđược thiết kế cho những người muốn thực hiện các thay đổi cục bộ cho các gói của họ và có thể đóng góp những thay đổi đó ngược dòng. Nó lấy các công thức nấu ăn từ MELPA , GNU ELPAEmacsMirror hoặc cho phép bạn chỉ định công thức của riêng bạn. Nó cũng hỗ trợ viết một lockfile sửa đổi để có khả năng tái tạo tối đa, trong số nhiều tính năng khác.

Gói sử dụng

Gói sử dụng được thiết kế chủ yếu như một công cụ quản lý cấu hình emacs. Nó sẽ tải xuống package.elcác gói cần thiết nhưng không có cơ chế tích hợp để truy cập các nguồn khác. Nó cho phép tải chậm các gói và tùy chỉnh hoãn lại. Điều này cải thiện việc khởi tạo emacs trong khi làm chậm việc sử dụng các gói ban đầu (nhưng nếu không sử dụng chúng trong một phiên nhất định thì chỉ có mức tăng ròng).


elpakit cũng có sẵn, nó thực hiện một công việc tương tự như thùng nhưng không có các bit không phải là elisp.
nic ferrier

@nicferrier Bạn có thể giải thích cách sử dụng nó để quản lý gói không? (Tôi có thể xem cách sử dụng nó cho các gói hiện có, nhưng Cask cũng cho phép thêm các nguồn tùy ý nếu tôi đọc chính xác)
Jonathan Leech-Pepin

well elpakit chủ yếu cho phép bạn thực hiện hai việc: xây dựng kho lưu trữ trên đĩa của bạn dưới dạng các gói (nó cũng tạo lưu trữ gói từ các bộ sưu tập của chúng) và để tự động tạo các gói phụ thuộc vào các gói khác. Mx elpakit-pack-list-buf tạo một bộ đệm với một danh sách các gói elpa của bạn trong đó bạn có thể sử dụng để tạo một gói khác phụ thuộc vào các gói elpa đã chọn.
nic ferrier

Tôi nghĩ rằng các gói được cài đặt thông qua trình quản lý gói distro đi vào /usr/share/emacs/site-lisp, không phải /usr/local/share...vì các localdir có nghĩa là cho các cài đặt không phân phối.
JeanPierre

10

Emacs sử dụng load-path, về cơ bản là một danh sách các thư mục cần tìm kiếm các tệp Lisp. Nếu một gói có sẵn trong load-pathđó thì nó được cài đặt .

Không có giao diện giữa trình quản lý gói Debian / Ubuntu và trình quản lý gói Emacs (pack.el). Cái trước cài đặt các gói Emacs theo kiểu toàn hệ thống (có sẵn cho mọi người dùng máy tính) trong khi gói sau cài đặt gói theo mặc định trong thư mục chính của bạn. Về mặt lý thuyết bạn có thể sử dụng cả hai nguồn để cài đặt các gói. Tuy nhiên, tôi sẽ khuyên bạn không nên thực hành điều này: Bạn có thể gặp một số vấn đề khi cài đặt cùng một gói từ cả hai nguồn.

Danh sách các gói Emacs bạn có thể cài đặt thông qua trình quản lý gói Debian / Ubuntu bị giới hạn hơn nhiều so với ELPA / MELPA / ..., vì mỗi gói phải được chuẩn bị riêng cho Debian / Ubuntu. Nói cách khác: gói trên ELPA! = Gói trong Debian.


Khi anh ấy hỏi về một vài năm trước, tôi nghĩ rằng anh ấy đã nói về Elpa
Malabarba

@Malabarba: Thật vậy, tôi đã hiểu lầm. Tôi bỏ câu không liên quan.
ớt bột

1
Câu trả lời này đúng với các nhà quản lý gói distro khác như yum (Fedora), pacman (Arch), v.v.
Vamsi

Và bạn đang thiếu marmalade-repo từ danh sách. Kho lưu trữ không phải GNU gốc.
nic ferrier
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.