मैं जूलिया के लिए एक पैकेज लिख रहा हूं और पैकेज के भीतर मैं अपने पैकेज के वर्तमान संस्करण संख्या को प्रिंट करने में सक्षम होना चाहता हूं। मैं निश्चित रूप से इसे मैन्युअल रूप से कर सकता हूं लेकिन मैं इसे सीधे मॉड्यूल से पढ़ने का एक तरीका ढूंढ रहा था। संस्करण संख्या Project.toml फ़ाइल में लिखी गई है, लेकिन मुझे कोड से इसे पढ़ने का कोई तरीका नहीं मिला है। कोई विचार?

5
dpac 8 मार्च 2020, 14:34

3 जवाब

आप कुछ इस तरह इस्तेमाल कर सकते हैं

julia> using Pkg

julia> loadedversion(m::Module) =  VersionNumber(Pkg.TOML.parsefile(joinpath(string(first(methods(m.eval)).file), "..", "..", "Project.toml"))["version"])
loadedversion (generic function with 1 method)

julia> loadedversion(Atom)
v"0.12.8"

कुछ त्रुटि प्रबंधन निश्चित रूप से विवेकपूर्ण होगा, लेकिन यह आपको उस पैकेज का संस्करण देगा जो वास्तव में लोड किया गया है (वर्तमान परिवेश में निर्दिष्ट एक के बजाय)।

6
pfitzseb 8 मार्च 2020, 14:44
मुझे लगता है कि यह मेरे मॉड्यूल के बाहर काम करेगा, लेकिन मैं इसे मॉड्यूल के भीतर एक्सेस करना चाहता हूं। उदा. ताकि मैं अपने मॉड्यूल के लॉग में वर्तमान संस्करण संख्या मुद्रित कर सकूं
 – 
dpac
9 मार्च 2020, 14:15
यदि आप इस विधि को Package/src/Package.jl में परिभाषित करते हैं, तो आप इसके बजाय VersionNumber(Pkg.TOML.parsefile(joinpath(@__DIR__, "..", "Project.toml"))["version"]) का उपयोग कर सकते हैं।
 – 
pfitzseb
9 मार्च 2020, 22:00

संभवतः -

using Pkg
Pkg.TOML.parse(read("Project.toml", String))["version"]

-> "0.0.1"

2
daycaster 8 मार्च 2020, 14:40
मैंने यह कोशिश की, लेकिन Project.toml फ़ाइल जो इसे पढ़ती है वह कॉलिंग फ़ंक्शन से संबंधित है। इसका मतलब है कि यह मेरे मॉड्यूल को कॉल करने वाले कोड की एक काल्पनिक परियोजना फ़ाइल पढ़ता है।
 – 
dpac
9 मार्च 2020, 14:19
@dpac, उपयुक्त निर्देशिका में बस cd
 – 
PatrickT
11 मई 2021, 08:33
using Pkg
function pkginfo(pkgname::AbstractString, key = "version")
    # Check if Package Project
    proj = Pkg.TOML.parsefile(Base.current_project()) 
    proj["name"] == pkgname && return proj[key]
    
    # If not in Project, pkgname must be in deps. Look in Manifest.toml
    # An error will be thrown if Manifest.toml is missing
    man = Pkg.TOML.parsefile(joinpath(Base.current_project() |> dirname, "Manifest.toml"));
    for (pkg, info) in man
        pkginfo = info |> first # Play with 'man' to see why
        pkg == pkgname && return pkginfo[key]
    end
end

यह आपको वर्तमान परिवेश में पैकेज (या अन्य डेटा) का संस्करण (स्ट्रिंग के रूप में) देगा। लेकिन एक पैकेज स्टैक में गहरे वातावरण में हो सकता है, इसलिए...

1
josePereiro 9 जुलाई 2020, 02:52