패키지에 대해 다음 설정이 있습니다 (더 나은 권장 패키지가 있는지 확실하지 않음).
(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
; Apparently needed for the package auto-complete (why?)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(setq url-http-attempt-keepalives nil)
패키지 설치 및 업데이트와 관련된 세 가지 질문이 있습니다.
Q1. 사용 가능한 패키지 목록 (및 최신 버전)을 업데이트하고 특정 패키지를 업데이트하는 방법이 있습니까?
Q.2 다음 패키지 소스의 차이점은 무엇입니까?
- ELPA,
- 암소 비슷한 일종의 영양
- 마멀레이드
- 멜파
Q.3 추가되는 순서가 중요합니까 package-archives
?
답변
-
패키지 목록을 자동으로 업데이트하려면 패키지 목록이없는 경우에만 다음을 사용하십시오.
(when (not package-archive-contents) (package-refresh-contents))
설치된 모든 패키지를 업데이트하려면을 입력하십시오
package-list-packages
. 그러면*Packages*
버퍼로 이동하고 패키지 목록도 업데이트 U x됩니다.package-refresh-contents
무조건 추가 한 모든 저장소에서 패키지 목록을 다운로드하려고 시도합니다package-archives
.package-archive-contents
이미 패키지 목록을 다운로드 한 경우 0이 아닙니다. -
ELPA 는 원본입니다. 더 이상 실제로 유지되지 않는다고 생각하지만 확실하지 않습니다. 나는 그것을 사용하지 않습니다.
GNU 는 “공식”입니다. Emacs와 함께 유지 관리되므로 항상 작동하지만 업데이트 및 새 패키지가 자주 나오지 않습니다.
마멀레이드 는 기본적으로 완전한 패키지를 업로드 할 수있는 웹 사이트이며 마멀레이드 리포지토리에 추가됩니다. 패키지의 업스트림에 대한 링크를 제출하지 않고 패키지 작성을 완전히 자동화하지는 않습니다. 업스트림을 추적하고 싶지는 않기 때문에 이것이 올바른 것이라고 생각합니다. 불행히도, 그것은 오랫동안 유지되지 않았지만 누군가가 최근에 그것을 인수하여 어느 시점에서 다시 돌아와야합니다.
Melpa 는 EmacsWiki lisp 영역 또는 github 저장소와 같은 URL을 가져 와서 자동으로 패키지를 빌드합니다. 따라서 추적하는 것이 무엇이든 대개 하루가 지납니다. 그것이 업스트림을 추적하지만 실제로는 문제가 없었으며, 이것이 대부분의 패키지가 나온 곳입니다. Melpa Stable 도 Melpa 와 비슷하지만 최신 개정판 대신 업스트림 저장소의 태그 개정판을 가져옵니다. Melpa 안정은 Melpa보다 패키지가 적습니다.
조직 모드 에는 자체
package.el
저장소가 있습니다 ( http://orgmode.org/elpa/ ).모든 패키지 저장소는 동일하게 작동합니다
package-archives
.다음 은이 주제에 대한 보다 심도 깊은 블로그 게시물 입니다.
-
확실하지 않지만 패키지가 다른 저장소에 복제되면 저장소가 표시되는 순서가
package-archives
우선 순위 를 결정합니다. 높은 우선 순위가 목록의 시작 또는 끝에 있는지 모르겠습니다.업데이트 : Emacs 25에는
package-archive-priorities
패키지 저장소의 우선 순위를 정하는 데 사용할 수 있는 변수 가 있습니다 (예 : ELPA보다 ELPA 선호).
init.el
관심있는 경우 내 관련 섹션은 다음과 같습니다 .
(setq jpk-packages
'(
ac-dabbrev
...
yasnippet
))
(package-initialize)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/"))
(add-to-list 'package-archives
'("org" . "http://orgmode.org/elpa/"))
;; install any packages in jpk-packages, if they are not installed already
(let ((refreshed nil))
(when (not package-archive-contents)
(package-refresh-contents)
(setq refreshed t))
(dolist (pkg jpk-packages)
(when (and (not (package-installed-p pkg))
(assoc pkg package-archive-contents))
(unless refreshed
(package-refresh-contents)
(setq refreshed t))
(package-install pkg))))
(defun package-list-unaccounted-packages ()
"Like `package-list-packages', but shows only the packages that
are installed and are not in `jpk-packages'. Useful for
cleaning out unwanted packages."
(interactive)
(package-show-package-list
(remove-if-not (lambda (x) (and (not (memq x jpk-packages))
(not (package-built-in-p x))
(package-installed-p x)))
(mapcar 'car package-archive-contents))))
답변
Emacs 내 M-x list-packages
에서 아카이브 내용을 자동으로 새로 고칠 모든 패키지를 나열 하는 데 사용 하십시오. 그런 다음 U
업그레이드 가능한 모든 패키지를 업그레이드하도록 표시 x
하고 실제로 새 업데이트를 수행합니다. 그러면 Emacs는 모든 업그레이드를 가져 와서 설치 한 다음, 더 이상 사용되지 않는 이전 버전을 제거 할 것인지 묻습니다.
또한 전용 파일에 패키지를 선언하여 패키지를 관리하는보다 편리한 방법을 제공하는 Carton 을 살펴 보고이 방법으로 선언 된 패키지를 자동으로 설치 및 업그레이드 할 수있는 편리한 명령 행 클라이언트가 포함되어 있습니다.
순서는 중요 package-archives
하지 않습니다 . Emacs는 모든 아카이브의 내용을 사용 가능한 패키지 및 해당 버전의 단일 코 히어 런트 목록으로 저장 package-archive-contents
합니다.
에 package-install
Emacs는 원본 아카이브에 상관없이 최신 버전의 패키지를 선택합니다. 패키지 원본에 대한 자세한 제어를 위해 MELPA는 지정된 아카이브에서 패키지를 블랙리스트 또는 화이트리스트 할 수 있는 melpa 패키지 를 제공합니다 .
답변
터미널에서 :
emacs
M-x list-packages
이것은 * packages * 버퍼에 넣습니다.
shift-u x
emacs가 (y / n) 물어보고 업데이트를 기다립니다
C-x k <ret>
그러면 * packages * 버퍼가 종료되고 다시 * scratch *로 돌아갑니다.
C-x-C-c
그러면 emacs가 종료되고 다시 시작할 수 있지만 디버그해야 할 수도 있습니다. (
emacs
내 2 ¢
답변
jpkotta의 답변에 대한 자세한 설명입니다.
이것은 위의 jpkotta의 답변에 대해 실험하고있는 조정입니다.
(setq n 0) ; set n as 0
(dolist (pkg pkgs-2b-present) ; for each pkg in list
(unless (or ; unless
(package-installed-p pkg) ; pkg is installed or
(assoc pkg ; pkg is in the archive list
package-archive-contents))
(setq n (+ n 1)))) ; add one to n
(when (> n 0) ; if n > 0,
(package-refresh-contents)) ; refresh packages
(바꾸기 (when (not package-archive-contents) (package-refresh-contents))
).
패키지 목록이 유스 케이스에 충분히 자주 새로 고쳐지지 않았습니다.
내 문제에 대한보다 효율적인 해결책이 있는지 고려하지 않았습니다. 먼저이 조정으로 문제가 사라지는 지 확인했습니다.