मैं जूलिया के लिए एक पैकेज लिख रहा हूं और पैकेज के भीतर मैं अपने पैकेज के वर्तमान संस्करण संख्या को प्रिंट करने में सक्षम होना चाहता हूं। मैं निश्चित रूप से इसे मैन्युअल रूप से कर सकता हूं लेकिन मैं इसे सीधे मॉड्यूल से पढ़ने का एक तरीका ढूंढ रहा था। संस्करण संख्या Project.toml फ़ाइल में लिखी गई है, लेकिन मुझे कोड से इसे पढ़ने का कोई तरीका नहीं मिला है। कोई विचार?
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"
कुछ त्रुटि प्रबंधन निश्चित रूप से विवेकपूर्ण होगा, लेकिन यह आपको उस पैकेज का संस्करण देगा जो वास्तव में लोड किया गया है (वर्तमान परिवेश में निर्दिष्ट एक के बजाय)।
संभवतः -
using Pkg
Pkg.TOML.parse(read("Project.toml", String))["version"]
-> "0.0.1"
cd
।
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
यह आपको वर्तमान परिवेश में पैकेज (या अन्य डेटा) का संस्करण (स्ट्रिंग के रूप में) देगा। लेकिन एक पैकेज स्टैक में गहरे वातावरण में हो सकता है, इसलिए...
संबंधित सवाल
नए सवाल
package
पैकेज मोटे तौर पर दो चीजों को संदर्भित करता है: 1) एक उपयोगी इकाई / निर्मित / संकलित सॉफ्टवेयर का घटक, या 2) वैश्विक नाम स्थान (जावा) का एक विभाजन।
Package/src/Package.jl
में परिभाषित करते हैं, तो आप इसके बजायVersionNumber(Pkg.TOML.parsefile(joinpath(@__DIR__, "..", "Project.toml"))["version"])
का उपयोग कर सकते हैं।