स्थापित पैकेजों का केवल सबसेट कैसे लोड करें


13

मैं एक बग में भाग गया जिसमें कई पैकेजों के बीच बातचीत शामिल थी। बग की रिपोर्ट करने के लिए, मुझे समस्या को दर्शाते हुए एक प्रतिलिपि प्रस्तुत करने योग्य नुस्खा प्रदान करना होगा। इसके लिए उपयुक्त पैकेजों को लोड करने की आवश्यकता होती है, लेकिन मेरे init से और कुछ नहीं, और कोई अन्य पैकेज नहीं। इसे करने का बेहतरीन तरीका क्या है?

अपडेट करें

स्पष्ट करने के लिए, मैं एक समस्या पैदा करने वाले कोड की पहचान करने के लिए एक द्विआधारी खोज में अपने .emacs के माध्यम से जाने की अवधारणा से परिचित हूं। इस स्थिति में, मुझे पता है कि कौन से पैकेज समस्या का कारण बन रहे हैं। जो मुझे नहीं पता है, वह यह है कि package-सिस्टम का उपयोग सिर्फ उन कुछ पैकेजों को लोड करने के लिए कैसे किया जाए ।

(package-initialize)पैकेज लोड करेगा, लेकिन मेरी .emacs.d/elpaनिर्देशिका में बाकी सब भी । package-load-listमुझे विशेष रूप से संकुल को लोड करने के लिए संकुल के विशेष संस्करण निर्दिष्ट करने की अनुमति देता है, या स्पष्ट रूप से बाहर करने के लिए विशेष संकुल । मैं रिवर्स की जरूरत है - कैसे संकुल की एक सूची के साथ Emacs की आपूर्ति करने में शामिल हैं , ELPA / पैकेज प्रणाली में किसी भी अन्य संकुल लोड किए बिना।


यदि आपने समस्या को पैकेज की एक सीमित संख्या में अलग किया है, तो आप एक खाली .emacsफ़ाइल से शुरू करके समस्या को फिर से शुरू करने का प्रयास कर सकते हैं - प्रत्येक पैकेज को एक-एक करके स्थापित करें और फिर देखें कि क्या समस्या अभी भी मौजूद है। आप खुद को आश्चर्यचकित कर सकते हैं और उस पैकेज को जिम्मेदार मान सकते हैं जो दूसरे पैकेज के साथ अच्छा नहीं खेलता है। जब आप जितना हो सके दूर चले गए हैं, तो उन चरणों को लिखें जो आपने समस्या को पुन: उत्पन्न करने और बग रिपोर्ट प्रस्तुत करने के लिए उपयोग किए हैं - जैसे, Emacs -Q से शुरू होकर , पैकेज A स्थापित करें, फिर पैकेज B स्थापित करें, फिर पैकेज C स्थापित करें, फिर *Scratch*बफ़र खोलें और टाइप करें ...
22

@Lawlist ने क्या कहा। यदि आप सुनिश्चित नहीं हैं कि आपने चीजों को पूरी तरह से कम कर दिया है, तो द्विआधारी खोज का उपयोग करें: आपके पास जो समस्या है उसका एक मनमाना 1/2 निकालें (जैसे 4 में से 2 pkgs निकालें)। फिर 3/4, 7/8 को हटा दें, ... कोड को काटने की जरूरत है जो इसे हर बार आधे में रिप्रोड करता है। आप इसी तरह से किसी दिए गए pkg के कोड को 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 -Qstraight.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 ...अन्य पैकेजों को लोड करने के लिए अधिक आर्गन्स जोड़ने की आवश्यकता होगी जो आवश्यक हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.