ইম্যাক্সে প্যাকেজ আপডেট করা হচ্ছে


144

প্যাকেজগুলির জন্য আমার নিম্নলিখিত সেটআপ রয়েছে (আরও ভাল প্রস্তাবিত কিনা তা নিশ্চিত নন):

(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)

প্যাকেজ ইনস্টলেশন ও আপডেট সম্পর্কিত আমার কাছে তিনটি প্রশ্ন রয়েছে।

চতুর্থাংশ 1। উপলভ্য প্যাকেজগুলির তালিকা (এবং সর্বাধিক সাম্প্রতিক সংস্করণ) আপডেট করার এবং কোনও নির্দিষ্ট প্যাকেজ আপডেট করার কোনও উপায় আছে কি?

Q.2 নিম্নলিখিত প্যাকেজ উত্সগুলির মধ্যে পার্থক্য কী ?:

  • ELPA,
  • গনুহ
  • কমলালেবুর আচার
  • Melpa

প্রশ্ন ৩. তারা যে ক্রমে যুক্ত হয় তাতে package-archivesকী বোঝায় ?


13
স্বয়ংক্রিয় সম্পূর্ণ হওয়ার জন্য মেল্পার প্রয়োজনীয়তা রয়েছে যেহেতু স্পষ্টতই কেউ মার্মালেডে অটো-সম্পূর্ণকে উপলব্ধ করতে বিরক্ত করে না। বিরক্ত করবেন না, বরং আপনার পরিষ্কার করুন package-archives। ELPA সংরক্ষণাগারটি থেকে মুক্তি পান, যা আর রক্ষণাবেক্ষণ করা হয় না, এবং মার্বেল সংরক্ষণাগার থেকে, যা স্পষ্ট দিকনির্দেশনা এবং রক্ষণাবেক্ষণ ছাড়াই পুরানো ও নকল প্যাকেজগুলির গোলযোগ। কেবলমাত্র স্ট্যান্ডার্ড জিএনইউ সংরক্ষণাগার, এবং মেলপা>
চাঁদমাজ

2
ধন্যবাদ @ লুনারিওর্ন! এটা খুব সহায়ক। আপনি কি জানেন কীভাবে আমি এই জাতীয় বিষয়ে অবহিত থাকতে পারি? (যেমন ইম্যাকস বিবর্তিত হওয়ার মতো এগুলির মতো "ভাল জিনিসগুলি জানার জন্য")
আমেলিও ওয়াজকেজ-রেইনা

3
ওয়েবে তথ্য অবাধে চারদিকে প্রবাহিত হচ্ছে, কেবল এটি ধরুন: রেডডিট-এ ইমাস অনুসরণ করুন, ব্লক এবং টুইটার অনুসরণ করুন যেমন নিক ফেরিয়ার, বোজিদার বাটসভ, ম্যাগনার সুইভেন, জন উইগেলি প্রভৃতি প্রখ্যাত ইমাস্যাক লোক, ফ্রেনোড আইআরসি-তে # ইমাসে যোগ দিন, এবং আরো অনেক.
lunaryorn

3
আপনি (setq package-enable-at-startup nil)যদি (package-initialize)নিজেকে ফোন করতে যাচ্ছেন তবে আপনার উচিত ।
ফিলস

2
ধন্যবাদ @ ফিলস - কেন এটি প্রয়োজন?
অ্যামিলিও ওয়াজকেজ-রেইনা

উত্তর:


163
  1. প্যাকেজগুলির তালিকা স্বয়ংক্রিয়ভাবে আপডেট করার জন্য, কেবলমাত্র প্যাকেজ তালিকা ইতিমধ্যে নেই , তবে নিম্নলিখিতটি ব্যবহার করুন:

    (when (not package-archive-contents)
        (package-refresh-contents))

    সমস্ত ইনস্টল করা প্যাকেজ আপডেট করার জন্য টাইপ করুন package-list-packagesযা আপনাকে *Packages*বাফারে নিয়ে যাবে (এবং প্যাকেজের তালিকাগুলির তালিকাও আপডেট করবে), এবং টাইপ করুন U x

    package-refresh-contentsআপনি যে সমস্ত রেপো যোগ করেছেন তা নিঃশর্তভাবে প্যাকেজ তালিকা ডাউনলোড করার চেষ্টা করে package-archives; package-archive-contentsআপনি যদি ইতিমধ্যে প্যাকেজ তালিকাটি ডাউনলোড করে থাকেন তবে তা অকার্যকর।

  2. ইএলপিএ আসল। আমি মনে করি না এটি সত্যিই আর রক্ষণাবেক্ষণ করা হয় তবে আমি নিশ্চিত নই। আমি এটি ব্যবহার করি না।

    জিএনইউ হলেন "অফিসিয়াল"। এটি ইমাস সহ বজায় থাকে, যার অর্থ জিনিসগুলি সর্বদা কাজ করা উচিত তবে আপডেট এবং নতুন প্যাকেজগুলি প্রায়শই আসে না।

    মূলত মার্মালেড এমন একটি ওয়েবসাইট যেখানে আপনি একটি সম্পূর্ণ প্যাকেজ আপলোড করতে পারেন এবং এটি মার্বেল রেপোতে যুক্ত হবে। আপনি কেবল প্যাকেজের আপস্ট্রিমে কোনও লিঙ্ক জমা দিবেন না এবং এটি প্যাকেজটির সম্পূর্ণরূপে তৈরি সম্পূর্ণরূপে স্বয়ংক্রিয় করে না। আমি মনে করি এটি সঠিক জিনিস, কারণ আপনি অগত্যা আপস্ট্রিমে ট্র্যাক করতে চান না। দুর্ভাগ্যক্রমে, এটি কিছুক্ষণের জন্য অবিস্মরণীয় ছিল, তবে কেউ সম্প্রতি এটি গ্রহণ করেছে তাই এটি কোনও কোনও ক্ষেত্রে ফিরে আসা এবং আরও ভাল হওয়া উচিত।

    Melpa, EmacsWiki পাতার মর্মর এলাকা অথবা GitHub রেপো যেমন করা জন্য একটি URL লাগে, এবং তা থেকে স্বয়ংক্রিয়ভাবে একটি প্যাকেজ তৈরী করে। সুতরাং এটি সাধারণত এটি ট্র্যাকিং যাই হোক না কেন পিছনে একটি দিন। যদিও এটি উপরিভাগের উপর নজর রাখে, অনুশীলনে আমার কখনও সমস্যা হয়নি, এবং আমার প্যাকেজগুলির বেশিরভাগই এখান থেকে। এছাড়াও মেলপা স্থিতাবস্থা রয়েছে , যা মেলপার মতো তবে সর্বশেষ সংশোধনের পরিবর্তে প্রবাহ রেপোটিকে ট্যাগযুক্ত সংশোধনগুলি ধরে। মেলপা স্থিতিতে মেলপার চেয়ে কম প্যাকেজ রয়েছে।

    অর্গ মোডের নিজস্ব একটি রয়েছেpackage.el রেপো রয়েছে ( http://orgmode.org/elpa/ )।

    সমস্ত প্যাকেজ রেপো একই কাজ করে, আপনি কেবল এগুলিকে আপনারটিতে যুক্ত করুন package-archives

    এখানে আরও গভীরতর ব্লগ পোস্টএই বিষয় সম্পর্কে , যার সাথে আমি বেশিরভাগই একমত।

  3. আমি নিশ্চিত নই, তবে আমি মনে করি যদি কোনও প্যাকেজটি বিভিন্ন রেপিতে নকল করা হয় তবে রেপোগুলি যে ক্রমটিতে উপস্থিত হবে package-archives তা অগ্রাধিকার নির্ধারণ করে। আমি জানি না যে উচ্চতর অগ্রাধিকারটি তালিকার শুরুতে বা শেষে রয়েছে।

    আপডেট: ইম্যাক্স 25-এ, একটি পরিবর্তনশীল রয়েছে package-archive-prioritiesযা আপনি আপনার প্যাকেজ রিপোকে অগ্রাধিকার দিতে ব্যবহার করতে পারেন (উদাহরণস্বরূপ, মেল্পার চেয়ে ইএলপিএ পছন্দ করুন)।


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))))

2
ধন্যবাদ! কি when (not package-archive-contents)চেক করে?
আমেলিও ওয়াজকেজ-রেইনা

3
শর্তসাপেক্ষে আমি যখনই ইমাস শুরু করি তখনই সতেজতা প্রতিরোধ করে (আমি সাধারণত যখন এটি বলি তখনই এটি পরীক্ষা করা উচিত)। এটি কেবলমাত্র কোনও প্যাকেজ সংরক্ষণাগার রয়েছে কিনা তা যাচাই করে, যা কোনও নতুন মেশিনে আমার কনফিগারেশনটি প্রথমবার ক্লোন করার ক্ষেত্রে হওয়া উচিত।
জেপকোটা

কেবলমাত্র আপনাকে ব্র্যান্ডি ট্রেনারের উত্তর সম্পর্কে জানানো, যা আপনার উত্তরটির পরিপূরক বলে মনে হচ্ছে - যদি এটি সহায়ক হয়।
আমেলিও ভাজকেজ-রেইনা

আমি মনে করি (refresh-package-contents)নতুন প্যাকেজগুলি ডাউনলোড করার আগে এটি শর্তহীনভাবে কল করা দরকার , অন্যথায় ইমাকগুলি পুরানো প্যাকেজ সংস্করণ (যা ততক্ষণে 404 এর মধ্যে রয়েছে) ডাউনলোড করার চেষ্টা করতে পারে, ব্যর্থ হতে পারে এবং লোডিং বন্ধ করে দেয়।
ভ্লাদিমির পানতেলিভ

কোন প্যাকেজটি অবাঞ্ছিত তা বোঝার সর্বোত্তম উপায় কী? @jpkotta
Alper

103

ইমাক্সের মধ্যে, M-x list-packagesসমস্ত প্যাকেজ তালিকাবদ্ধ করতে ব্যবহার করুন যা আর্কাইভ সামগ্রীতে স্বয়ংক্রিয়ভাবে রিফ্রেশ হবে। এরপরে Uআপগ্রেড করার জন্য সমস্ত আপগ্রেডযোগ্য প্যাকেজগুলি চিহ্নিত করতে ব্যবহার করুন এবংx করতে এবং নতুন আপডেটগুলি সম্পাদন করতে ব্যবহার করুন। ইমাসগুলি তারপরে সমস্ত আপগ্রেড আনবে এবং ইনস্টল করবে এবং পরে আপনাকে পুরানো, অপ্রচলিত সংস্করণগুলি সরিয়ে ফেলতে হবে কিনা তা জিজ্ঞাসা করবে।

আপনার প্যাকেজগুলি একটি ডেডিকেটেড ফাইলে ঘোষণা করে আপনার প্যাকেজগুলি পরিচালনা করার আরও সুবিধাজনক উপায় সরবরাহ করে এমন কার্টনটিও একবার দেখে নিতে পারেন এবং এইভাবে ঘোষিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ইনস্টল ও আপগ্রেড করার জন্য একটি সুবিধাজনক কমান্ড লাইন ক্লায়েন্ট অন্তর্ভুক্ত রয়েছে।


অর্ডার দিয়ে কিছু যায় package-archivesআসে না । ইম্যাক্স সমস্ত সংরক্ষণাগারগুলির বিষয়বস্তুগুলিকে সঞ্চিত সঞ্চিত প্যাকেজ এবং তাদের সংস্করণগুলির একক সুসংগত তালিকায় একত্রিত করেpackage-archive-contents

এর পরে package-install, ইমাক্স উত্পন্ন সংরক্ষণাগারটিকে নির্বিশেষে প্যাকেজের কেবলমাত্র নতুন সংস্করণটি বেছে নেবে। প্যাকেজ উত্স সম্পর্কে আরও নিয়ন্ত্রণের জন্য, মেলপা মেলপা প্যাকেজ সরবরাহ করে যা নির্দিষ্ট আর্কাইভগুলি থেকে কালো বা হোয়াইটলিস্ট করতে পারে।


2
এটি S-uআরও সুনির্দিষ্ট হতে হবে।
লেনার হোয়েট

@ এমসিবি কি S-u? প্যাকেজ মেনুতে এই বাঁধাই ব্যবহার করা হয় না।
লুনারিওর

2
আমি বলতে চাই Shift-u
লেনার হোয়েট

8
@ এমসিবি ওয়েল, সে কারণেই আমি একটি মূলধন ইউ 😊
চন্দ্রদৈর্ঘ্য

1
এটি কেবল আমার মতো বিভ্রান্ত লোকদের জন্য যা মনে করে এর অর্থ <কেবিডি> ইউ </ কেবিডি> means
লেনার হোয়েট

23

টার্মিনালে:

emacs

M-x list-packages

এটি আপনাকে * প্যাকেজগুলি * বাফারে রাখে

shift-u x

ইমাস আপনাকে জিজ্ঞাসা করবে (y / n), আপডেটের জন্য অপেক্ষা করুন

C-x k <ret>

এটি * প্যাকেজগুলি * বাফারকে হত্যা করবে এবং আপনাকে আবার * স্ক্র্যাচ * এ ফিরিয়ে দেবে

C-x-C-c

এটি ইম্যাক্স থেকে প্রস্থান করবে এবং আপনাকে পুনরায় লঞ্চ করতে দেবে, তবে আপনাকে ডিবাগ করতে হতে পারে :(

emacs

আমার 2 ¢


আমি যখন "ইউ" টাইপ করলাম তখন আমি "কোনও আদেশ নির্দিষ্ট নেই" বা এর মতো কিছু পেয়েছি। দৌড়ানোর পরে M-x package-refresh-contents, এটি আমাকে আপডেটের জন্য চিহ্নিত করতে "ইউ" টাইপ করতে অনুরোধ জানায় এবং তারপরে আপডেটগুলি চালাতে আমি "x" টাইপ করতে সক্ষম হয়েছি।
মিঃকোলস

2

এটি জেপকোটার উত্তরে আরও বর্ধিত মন্তব্য।

উপরের জেপকোটার উত্তরের জন্য আমি এটি একটি সমন্বয় পরীক্ষা করছি:

(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)))

প্যাকেজ-তালিকাটি আমার ব্যবহারের ক্ষেত্রে যথেষ্ট পরিমাণে রিফ্রেশ হয় না।

আমার সমস্যার আরও দক্ষ সমাধান আছে কিনা তা আমি বিবেচনা করি নি; প্রথমত, আমাকে দেখতে হবে যে এই সমন্বয়টি দিয়ে সমস্যাটি চলে যায় কিনা।


আমার উত্তরে package-archive-contentsকেবল তা সতেজ করা হয় যদি তা বিদ্যমান না থাকে। ধারণাটি হ'ল আপনি আপনার .emacs.d কে একটি নতুন মেশিনে অনুলিপি করেন এবং এটি স্বয়ংক্রিয়ভাবে আপনার সমস্ত প্যাকেজ ইনস্টল করে, তবে এর পরে আপনাকে ম্যানুয়ালি আপডেট করতে হবে। আমি প্রতি দুই সপ্তাহে একবার আপডেট করার চেষ্টা করি। আমি অনুমান করছি যে আপনি আপনার তালিকায় একটি প্যাকেজ যুক্ত করেছেন, তবে এটি পাওয়ার জন্য আপনার package-archive-contentsবয়স খুব বেশি ছিল?
জেপকোটা

@ জেপকোত্তা, আমার একটি দ্বৈত বুট রয়েছে, প্রত্যেকে ~/.emacs.d/elpa/প্যাকেজের অবস্থানের জন্য তাদের ডিফল্ট ব্যবহার করে । তবে আপনার প্যাকেজ-ইনস্টলিং-কোডটির আমার সংস্করণটি "তৃতীয়" বিভাগে ( e:/emacs-configবা /e/emacs-config/) রয়েছে। সুতরাং আমি একটি ওএসে থাকাকালীন তালিকায় একটি প্যাকেজ যুক্ত করি Emacsএবং অন্য অপারেটিং সিস্টেমের মধ্যে লোড হওয়ার পরে তা আপডেট হওয়া উচিত । নিশ্চিতভাবে আমার সমাধানে ওভারকিলের কিছু উপাদান রয়েছে তবে এটি কমপক্ষে কাজ করছে বলে মনে হচ্ছে।
ব্র্যাডি ট্রেইনার 21 '

@ জেপকোত্তা, কেন আমার package-archive-contentsমনে হয় বোধহয় এতটা বেঁচে আছে যে আমাকে ছেড়ে যায়। এটি এমন একটি বিষয় যা আমি সঙ্কুচিত করি নি। যদি আমি ভবিষ্যতে একটি "আরও মার্জিত" সমাধান সন্ধান করি এবং সন্ধান করি তবে আমি এটি আমার পোস্টে যুক্ত করব।
ব্র্যাডি ট্রেইনার

1
(package-refresh-contents)লিখেছেন ~/.emacs.d/elpa/archives। আপনার যদি ওএসের মধ্যে ডিরেক্টরিটি ভাগ করে নিয়ে থাকেন তবে এটি স্পষ্ট নয়। আমি elpa/ডিরেক্টরিগুলি ভাগ করে নেওয়ার বিরুদ্ধে সুপারিশ করব , কারণ elpa/ইমাকস বাইটকোড (কোডটি বাইকম্পাইলযুক্ত) পিছনের দিকে সামঞ্জস্যপূর্ণ নয় ( gnu.org/software/emacs/manual/html_node/elisp/… )। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে উভয় প্রতিষ্ঠানে ইমাসের একই সংস্করণ রয়েছে। আমি আমার .emacs.dসংস্করণটি নিয়ন্ত্রণে রাখি এবং এটির সাথে বিভিন্ন ইনস্টলেশন সিঙ্ক্রোনাইজ করি।
জেপকোটা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.