2016-08-30 1 views
5

Comment puis-je utiliser plusieurs versions différentes ou branches du même module dans un seul script Julia?Importation de plusieurs versions/branches d'un module de référence dans Julia

par exemple. Si je voulais comparer chacune des versions marquées.

(Quelqu'un a posé une question similaire récemment et j'ai répondu au mauvais mais si cela peut être utile de toute façon.)

Edit: J'ai répondu moi-même, mais je suis sûr que leur peut être une meilleure façon!

Répondre

4

Vous pouvez simplement git checkout une autre version du module, puis utiliser benchmarkTools.jl indice de référence. Cependant, il peut être préférable d'utiliser plusieurs scripts (ou au moins ignorer le premier essai) (Voir ce commentaire Importing multiple versions of the same Module/Package for Benchmarking pour plus d'informations).

par exemple. Empêche d'avoir à copier les modules mais je pense que c'est un peu maladroit. Vous pouvez même le faire dans une boucle pour un bon nombre de versions en capturant la sortie de git tag

for i in readlines(`git tag`) 
    version2checkout = chomp(i) 
    # checkout version and benchmark 
end 
1

Notez également que Pkg.checkout prend un argument branch en option:

help?> Pkg.checkout 
    checkout(pkg, [branch="master"]; merge=true, pull=true) 

    Checkout the Pkg.dir(pkg) repo to the branch branch. Defaults to checking 
    out the "master" branch. To go back to using the newest compatible released 
    version, use Pkg.free(pkg). Changes are merged (fast-forward only) if the 
    keyword argument merge == true, and the latest version is pulled from the 
    upstream repo if pull == true. 

vous pouvez donc faire Pkg.checkout("MyPackage", "v0.6.0"). Pour s'assurer que les modules sont rechargés, la fonction workspace() peut être utile; ou un nouveau processus de Julia pourrait être exécuté pour chaque version de paquet.

+0

avez-vous essayé? Je ne pouvais pas le faire fonctionner. Je pensais que vous pourriez avoir besoin d'utiliser "tags/v0.6.0". Rappelez-vous, je ne ai essayé sur un paquet ... –

+0

@AlexanderMorley Je ne sais pas pourquoi vous avez besoin des balises '/'. Cela semble fonctionner pour moi sans. –

+0

Hmmm je vais enquêter ... –