2016-03-31 2 views
0

Soweit ich Julia benutzt habe, hatte ich den Eindruck, dass Paketimporte nur auf der obersten Ebene durchgeführt werden konnten. Hat jemand jedoch eine knifflige/inoffizielle Methode gefunden, um die folgende Arbeit zu machen? Grundsätzlich möchte ich das Paket bedingt importieren. Wenn das Paket installiert ist, möchte ich es importieren, aber wenn es nicht installiert ist, möchte ich es nicht einschließen (Julia wird es dann nicht automatisch installieren).Kein Top-Level-Paketimport

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

Ich verstehe das nicht möglich sein, aber wenn man bedenkt, wie schnell Julia ändert, würde ich nicht überrascht, wenn es eine neue Methode, dies zu tun ist.

Antwort

2

Wie gesagt, Sie Pkg.installed() einen Void-Typen zurück, wenn das Paket nicht ist installed.So Sie eine Funktion erstellen können Sie diese Überprüfung tun:

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 

versucht, dies mit Julia 0.4.5 AWS nicht installiert und PyPlot installiert. Überprüfen Sie die metaprogramming section für Informationen darüber, wie die eval() und parse() Funktionen arbeiten.

+0

Ordentlicher Trick; Ich benutze die Metaprogrammierung die ganze Zeit, aber ich hatte nicht darüber nachgedacht, die Aussage in eine "Parse" zu bringen und dann den globalen Umfang von "eval" zu nutzen, um es zum Laufen zu bringen! Vielen Dank! –