2014-08-29 5 views
7

मैं जूलिया सत्र के आयातित/प्रयुक्त पैकेजों की सूची कैसे प्राप्त कर सकता हूं?जूलिया में लोड/आयातित पैकेजों की सूची

Pkg.status() सभी स्थापित संकुलों की सूची। मैं जो कि कि आयात किया गया/using ... या import ...

ऐसा लगता है कि whos() प्रासंगिक जानकारी शामिल के माध्यम से भरी हुई में दिलचस्पी रखता हूँ (नाम और है कि क्या यह एक मॉड्यूल है या नहीं)। क्या whos() का आउटपुट एक चर में कैप्चर किया जा सकता है?

उत्तर

4
using Lazy 
children(m::Module) = 
    @>> names(m, true) map(x->m.(x)) filter(x->isa(x, Module) && x ≠ m) 

children(Main) तो आप मॉड्यूल की एक सूची वर्तमान में लोड दे देंगे।


संपादित करें: मैं Lazy.jl यहाँ थ्रश मैक्रो (@>>) के लिए इस्तेमाल किया, लेकिन आप आसानी पर्याप्त बिना यह पुनर्लेखन कर सकते हैं:

children(m::Module) = 
    filter(x->isa(x, Module) && x ≠ m, map(x->m.(x), names(m, true))) 

वैकल्पिक रूप से आप के लिए filter को && x ≠ Lazy जोड़ सकता है इसे शामिल करने से बचें।

+0

एक आकर्षण की तरह काम करता है। आलसी पर भरोसा किए बिना करना संभव है? क्योंकि फिलहाल यह लोड मॉड्यूल की सूची बदल रहा है जिसे हम प्राप्त करना चाहते हैं। – Julian

+0

निश्चित रूप से, उत्तर अद्यतन किया गया। –

+0

अच्छा लग रहा है! 'आलसी' को मैन्युअल रूप से हटाने से हमारे मामले में काम नहीं आएगा, क्योंकि हम अभी भी इसे कैप्चर करना चाहते हैं यदि यह हमारे द्वारा लोड नहीं किया गया था। आपका दूसरा समाधान यह सब अच्छी तरह से संबोधित करता है। – Julian

5

names का उपयोग करें, उदा।

julia> using JuMP 

julia> using Gurobi 

julia> names(Main) 
13-element Array{Symbol,1}: 
:Calculus 
:ans 
:JuMP 
:DualNumbers 
:Graphs 
:DataStructures 
:ReverseDiffSparse 
:MathProgSolverInterface 
:Base 
:MathProgBase 
:Core 
:Gurobi 
:Main 
+0

ठीक है, यह एक अच्छी शुरुआत की तरह लगता है। क्या इसे केवल संकुल तक सीमित करना संभव है? फिलहाल, इसमें वर्कस्पेस में वेरिएबल्स भी शामिल हैं जो पैकेज नाम के साथ संघर्ष कर सकते हैं (एक वैरिएबल असाइनमेंट 'वितरण = 1' की कल्पना करें जो लोड किए गए पैकेज से भ्रमित हो सकता है)। – Julian

+0

मुझे यह संभव नहीं लगता है, लेकिन किसी को कुछ पता हो सकता है जो मैं – IainDunning

+0

जिज्ञासा से नहीं जानता, आप यह क्यों जानना चाहते हैं कि यह कैसे करें? – IainDunning

0

ऊपर उत्तर अब जूलिया 0.5 में पहले जैसा काम नहीं करता है। यह कई मामलों में काम करता है, उदाहरण:

children(SIUnits) -> SIUnits.ShortUnits 

लेकिन अधिकांश पैकेज (जो मैं उपयोग करता हूं) वास्तव में submodules परिभाषित नहीं करते हैं। मुझे जूलिया कमांड लाइन संस्करण में और एक और मिनट के उत्कृष्ट जूनो आईडीई में डिबगिंग के लिए यह उपयोगी लगता है:

loadedmodules() = filter(names(Main, false)) do n 
              isa(eval(n), Module) && n ≠ Main 
             end 
संबंधित मुद्दे