2016-03-31 23 views
0

Julia'yı kullandığım kadarıyla, paket ithalatının yalnızca en üst düzeyde yapılabileceği izlenimi altındaydım. Bununla birlikte, aşağıdaki işleri yapmak için herhangi bir zor/gayri resmi yöntem bulamadı mı? Temel olarak, paketi koşullu olarak almak istiyorum. Paket yüklüyse, onu almak istiyorum, ancak yüklü değilse, onu eklemek istemiyorum (bu yüzden Julia otomatik olarak yüklemez). Üst düzey paketler içe aktarma

if Pkg.installed("my_package") != Void import my_package else ## DO NOT IMPORT my_package end

bu imkansız anlıyorum ama bunu yapmanın yeni bir yöntem olmadığını Julia değişiyor ne kadar hızlı göz önüne alındığında, ben şaşırmam.

function load_if_installed(package_name) 
    if typeof(Pkg.installed(package_name)) == Void 
    println("package is not installed") 
    else 
    # load in package after parsing command 
    eval(parse("using $package_name")) 
end 
end 

load_if_installed("PyPlot") 
> 
load_if_installed("AWS") 
> package is not installed 

Julia 0.4.5 AWS ile bu çalıştı yüklü değil:

cevap

2

paket sizin için bu denetimi yapmak için bir işlev oluşturabilir installed.So değilse Pkg.installed() bir Void türü dönecektir söylediği gibi ve PyPlot kuruldu. eval() ve parse() işlevlerinin nasıl çalıştığını öğrenmek için metaprogramming section'u kontrol edin.

+0

Temiz numara; Ben her zaman meta programlamayı kullanıyorum, ama deyimi bir 'ayrıştırma' içinde sarmalamayı ve daha sonra onu çalışmak için 'eval' global kapsamından yararlanmayı düşünmemiştim! Teşekkürler! –

İlgili konular