ইনস্টলড প্যাকেজগুলির কেবলমাত্র একটি উপসেট কীভাবে লোড করবেন


13

আমি একটি বাগের মধ্যে দৌড়েছি যা বেশ কয়েকটি প্যাকেজের মধ্যে ইন্টারঅ্যাকশন জড়িত। ত্রুটিটি রিপোর্ট করার জন্য, আমাকে সমস্যার চিত্রিত করে একটি পুনরুত্পাদনযোগ্য রেসিপি সরবরাহ করতে হবে। এর জন্য উপযুক্ত প্যাকেজগুলি লোড করা দরকার, তবে আমার থিম থেকে অন্য কিছু নেই, এবং অন্য কোনও প্যাকেজ নেই। এই কাজ করতে সবচেয়ে ভালো উপায় কি?

হালনাগাদ

স্পষ্ট করার জন্য, আমি একটি সমস্যা সৃষ্টি করে এমন কোড সনাক্ত করার জন্য বাইনারি অনুসন্ধানে আমার .emacs মাধ্যমে চালনার ধারণার সাথে আমি পরিচিত। এই পরিস্থিতিতে, আমি জানি ঠিক কী প্যাকেজগুলি ইতিমধ্যে সমস্যা তৈরি করছে। আমি যা জানি না, তা হল package-এই কয়েকটি প্যাকেজ লোড করার জন্য সিস্টেমটি কীভাবে ব্যবহার করা যায় ।

(package-initialize)প্যাকেজগুলি লোড করবে, তবে আমার .emacs.d/elpaডিরেক্টরিতে থাকা সমস্ত কিছু । package-load-listআমাকে স্পষ্টভাবে করার লোড প্যাকেজ বিশেষ সংস্করণ বা বিশেষ প্যাকেজ নির্দিষ্ট করার অনুমতি দেবে অগ্রাহ্য । আমি রিভার্স প্রয়োজন - কিভাবে প্যাকেজে একটি তালিকা সঙ্গে এ গিয়ে Emacs সরবরাহ অন্তর্ভুক্ত , elpa / প্যাকেজ সিস্টেমের মধ্যে অন্য কোন প্যাকেজ লোড ছাড়াই।


আপনি যদি সীমাবদ্ধ সংখ্যক প্যাকেজগুলিতে সমস্যাটি বিচ্ছিন্ন করে থাকেন তবে আপনি একটি ফাঁকা .emacsফাইল থেকে শুরু করে সমস্যাটিকে পুনরায় উত্পাদনের চেষ্টা করতে পারেন - প্রতিটি প্যাকেজ একে একে ইনস্টল করুন এবং তারপরে দেখুন সমস্যাটি এখনও রয়েছে কিনা। আপনি নিজেরাই অবাক করে দিতে পারেন এবং এমন প্যাকেজটিকে দায়বদ্ধ করতে পারেন যা অন্যান্য প্যাকেজের সাথে ভাল না খেল। আপনি যতদূর যেতে পেরেছেন, সমস্যাটি পুনরুত্পাদন করতে এবং বাগ রিপোর্ট জমা দেওয়ার জন্য আপনি যে পদক্ষেপগুলি লিখেছিলেন তা লিখুন - যেমন, ইমাস-কিউ থেকে শুরু করে , প্যাকেজ এ ইনস্টল করুন, প্যাকেজ বি ইনস্টল করুন, তারপরে প্যাকেজ সি ইনস্টল করুন, তারপরে *Scratch*বাফারটি খুলুন এবং টাইপ করুন ...
আইনী তালিকা

@ লোলিস্ট কী বলেছে। আপনি যদি নিশ্চিত না হন যে আপনি জিনিসগুলি পুরোপুরি সঙ্কুচিত করেছেন, বাইনারি অনুসন্ধান ব্যবহার করুন: আপনার যা আছে তা সমস্যাটি পুনরায় ছড়িয়ে দেয় তার একটি স্বেচ্ছাসেবী 1/2 মুছে ফেলুন (উদাহরণস্বরূপ 4 এর মধ্যে 2 পিকেজি সরান)) তারপরে 3/4, 7/8, ... সরিয়ে ফেলুন ... প্রতিটি বারে অর্ধেকের জন্য এটির তিরস্কার করার জন্য প্রয়োজনীয় কোডটি কেটে নিন। আপনি একইভাবে প্রদত্ত পিকেজির কোডটি 1/2 ইত্যাদিতে কেটে ফেলতে পারেন, জিনিসগুলি খুব সামান্য বিটকে সংশোধন করার জন্য এটির সংশোধন করার জন্য প্রয়োজনীয় কোডটি সঙ্কুচিত করতে। আপনি পাঠ্যের একটি অঞ্চল comment-regionমন্তব্য করতে (বা, সাথে সংশোধন C-uকরার জন্য) কমান্ডটি ব্যবহার করতে পারেন ।
ড্র হয়েছে

আমি এটি ছদ্ম-কোড স্তরে বুঝতে পারি। আমি বুঝতে পারি না কীভাবে, প্যাকেজ-কমান্ডের পরিবার ব্যবহার করে আপনি আপনার প্যাকেজগুলির কেবলমাত্র একটি উপসেট লোড করেন। emacs.d / elpa ডিরেক্টরি
টাইলার

পূর্বে একজন রক্ষণাবেক্ষণকারী ইঙ্গিত দিয়েছিল যে আমি প্যাকেজ-আরম্ভের সাথে সবকিছু লোড করছি, এবং আমি কীভাবে এই github.com/emacs-ess/ESS/issues/140
টাইলার

1
package-load-list হয় একটি উপায় স্পষ্টভাবে, প্যাকেজ অন্তর্ভুক্ত করা মাত্র অপসারণ allপ্রতীক।
npostavs

উত্তর:


10

package-load-listপরিবর্তনশীল যা প্যাকেজ ও সংস্করণ লোড করতে অবিকল নির্দিষ্ট করতে ব্যবহার করা যেতে পারে:

List of packages for `package-initialize' to load.
Each element in this list should be a list (NAME VERSION), or the
symbol `all'.  The symbol `all' says to load the latest installed
versions of all packages not specified by other elements.

For an element (NAME VERSION), NAME is a package name (a symbol).
VERSION should be t, a string, or nil.
If VERSION is t, the most recent version is activated.
If VERSION is a string, only that version is ever loaded.
 Any other version, even if newer, is silently ignored.
 Hence, the package is "held" at that version.
If VERSION is nil, the package is not loaded (it is "disabled").

কেবলমাত্র নজর রাখার বিষয়টি হ'ল ডিফল্ট মানটি অন্তর্ভুক্ত থাকে all, যদি আপনি setqতা করেন তবে আপনি ভাল থাকবেন কারণ এটি সম্পূর্ণরূপে মূল মানটিকে ওভাররাইট করে।

(require 'package)
(setq package-load-list
      '((package1 "4.2")
        (package2 "0.5.1")))
(package-initialize)

4

এমন একটি বিকল্প যা প্রাসঙ্গিক ক্ষেত্রে ভাল কাজ করতে পারে যেখানে বাগটি পুনরুত্পাদন করতে কাজ করছে এমন বিকাশকারীরা ইতিমধ্যে ইনস্টল হওয়া নির্ভরতাগুলি (বা চান না) tryপ্যাকেজটি ব্যবহার করতে পারেন ( https://melpa.org/#/try )। অন্যরা স্থানীয় ইনস্টলেশন পরিবর্তন না করে প্যাকেজ পরিচালনা থেকে প্যাকেজ লোড করতে পারে।

(package-install 'try)
(require 'try)

(try 'some-package)
(try 'some-other-package)

(steps (to reproduce) (the (problem)))

2

এই ব্যবহারের ক্ষেত্রে একটি ভয়ানক ঘাটতি package.el, তাই ব্যবহার করবেন না package.el। পরিবর্তে, straight.el( যেমন আমি লেখক) এর মতো একটি প্যাকেজ পরিচালক ব্যবহার করুন , যা বিশেষভাবে এই ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য ডিজাইন করা হয়েছিল।

straight.elঅন্যান্য প্যাকেজ পরিচালকদের তুলনা সহ ভার্বোজ ডকুমেন্টেশনের জন্য , README দেখুন । নীচে, আমি আপনার প্রশ্নের সাথে প্রাসঙ্গিক বিভাগটি উদ্ধৃত করেছি।

straight.elবাগ পুনরুত্পাদন করতে ব্যবহার করে

আমি লিখতে চেয়েছিলাম তার একটি বড় কারণ straight.elহ'ল বিদ্যমান প্যাকেজ পরিচালকরা বাগের পুনরুত্পাদন করার জন্য ভাল ছিলেন না। উদাহরণস্বরূপ, প্যাকেজ ম্যানেজারটি আরম্ভ করার সাথে সাথে তাদের কিছু ইনস্টল করা প্যাকেজ লোড করবে! অবশ্যই এটি "ন্যূনতম পরীক্ষার ক্ষেত্রে" গ্রহণযোগ্য নয়।

বিপরীতে, বুটস্ট্র্যাপিং নিজেকে straight.elবাদ দিয়ে কিছু লোড করে না straight.el(ডিফল্ট রেসিপি সংগ্রহস্থলগুলি নিবন্ধিত রয়েছে, তবে প্রয়োজন পর্যন্ত ক্লোন করা হয়নি)। আপনার সাধারণত বুটস্ট্র্যাপ স্নিপেটেরstraight.el মাধ্যমে লোড করা উচিত , তবে আপনি যখন যাবেন , আপনি emacs -Qএখানে কীভাবে আরম্ভ করতে পারেন তা এখানে straight.el:

M-x load-file RET ~/.emacs.d/straight/bootstrap.el RET

আপনি কমান্ড লাইন থেকে এটি করতে পারেন, সম্ভবত এটির জন্য একটি নাম তৈরি করে:

$ emacs -Q -l ~/.emacs.d/straight/bootstrap.el

ধরা যাক আপনি প্রজেক্টাইলের জন্য একটি বাগ প্রতিবেদন করছেন। প্রজেক্টাইল এবং এর সমস্ত নির্ভরতা লোড করতে, চালান:

M-x straight-use-package RET projectile RET

নোট করুন যে এটি বর্তমানে প্রজেক্টাইল এবং এর সমস্ত নির্ভরতাগুলির চেক-আউট সংশোধনগুলি ব্যবহার করবে, তাই আপনার বাগ রিপোর্ট তৈরি করার জন্য আপনার সেগুলির নোট নেওয়া উচিত।


0

যখন আপনার এটি এক-অফের জন্য প্রয়োজন (উদাহরণস্বরূপ বাগের পুনরুত্পাদন করার জন্য একটি রেসিপি চেষ্টা করে দেখুন), আপনি প্রায়শই এখান থেকে দূরে যেতে পারেন:

emacs -Q -l ~/.emacs.d/elpa/<pkg>-<vers>/<pkg>-autoloads.el

আমি "প্রায়শই" বলেছিলাম কারণ এটি নির্ভরতার দিকে মনোযোগ দেবে না, তাই কিছু ক্ষেত্রে আপনার প্রয়োজনীয় -l ...অন্যান্য প্যাকেজগুলি লোড করার জন্য আপনাকে সেইগুলি আরও বেশি যুক্ত করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.