web-dev-qa-db-fra.com

Changer le répertoire des packages dans Julia

Je veux changer le répertoire des packages dans Julia. La valeur par défaut est

"~/.Julia/v0.4"

Je veux déplacer vers /opt/Julia/v0.4/. Idéalement, je souhaite déplacer les packages déjà installés dans ~/.Julia/v0.4 au nouvel emplacement. Mais si ce n'est pas possible, je peux les réinstaller.

Que dois-je faire?

19
becko

Julia-v0.6 et avant

on peut changer le répertoire des packages de Julia en suivant ces étapes:

  1. exécutez export Julia_PKGDIR=/your/directory dans Shell (ou ajoutez manuellement une nouvelle variable d'environnement Julia_PKGDIR sur Windows)
  2. exécutez Pkg.init() dans Julia pour initialiser un nouveau système de package
  3. copier REQUIRE de l'ancien répertoire vers le nouveau
  4. exécuter Pkg.resolve() dans Julia

Julia-v0.7 +

Le "répertoire de packages" dans le nouveau gestionnaire de packages est appelé DEPOT_PATH , il peut être modifié en ajoutant une variable d'environnement Julia_DEPOT_PATH:

Julia_DEPOT_PATH=./test Julia

Julia> DEPOT_PATH
1-element Array{String,1}:
 "./test"

(v0.7) pkg> add JSON2
   Cloning default registries into /Users/gnimuc/test/registries

Avec le nouveau gestionnaire de packages, nous sommes en mesure de créer des projets isolés dans n'importe quel répertoire que nous voulons au lieu d'avoir un seul répertoire de packages géant. Chaque projet contient un Project.toml Et un Manifest.toml S'il a des dépendances. Ces deux fichiers enregistrent et assurent le suivi de l'environnement du projet.

METTRE À JOUR

Les informations suivantes peuvent être obsolètes. Je recommande fortement d'utiliser PkgTemplates.jl pour générer des projets dans Julia-v1.0 +.

Générer un nouveau projet

Nous pouvons générer un nouveau projet dans n'importe quel dossier, mais nous devons cd dans le dossier du projet pour using le projet. Le (v0.7) Ci-dessous montre que nous sommes toujours dans l'environnement par défaut, nous ne pouvons donc pas utiliser le projet nouvellement généré:

(v0.7) pkg> generate ./MyNewProject
Generating project MyNewProject:
    ./MyNewProject/Project.toml
    ./MyNewProject/src/MyNewProject.jl

Julia> using MyNewProject
ERROR: ArgumentError: Module MyNewProject not found in current path.
Run `Pkg.add("MyNewProject")` to install the MyNewProject package.
Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:868

Si nous cd dans le dossier du projet et activate l'environnement, nous pouvons using notre nouveau projet sans aucun problème:

Shell> cd MyNewProject/
/Users/gnimuc/MyNewProject

(v0.7) pkg> activate .

(MyNewProject) pkg> 

Julia> using MyNewProject

Je pense que c'est la grande différence entre le nouveau gestionnaire de paquets et l'ancien. En bref, nous devons explicitement activate notre projet/package non enregistré.

Téléchargez et lancez le projet de quelqu'un d'autre

Selon le document, nous pouvons ajouter un package/projet non enregistré via la commande add:

(HelloWorld) pkg> add https://github.com/fredrikekre/ImportMacros.jl

Cette commande ajoute le package cible en tant que dépendance de notre projet actuel. Dans cet exemple, nous avons ajouté ImportMacros dans le Manifest.toml De HelloWorld. Et si nous l'utilisions simplement comme un projet de haut niveau? Pour l'ajouter à l'environnement par défaut (v0.7)? non, nous n'en avons pas besoin. La réponse est que nous pouvons télécharger directement le code, cd dans le dossier et exécuter instantiate en mode pkg:

Shell> git clone https://github.com/Gnimuc/GLTF.jl GLTF
Cloning into 'GLTF'...
remote: Counting objects: 286, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 286 (delta 73), reused 103 (delta 59), pack-reused 167
Receiving objects: 100% (286/286), 62.16 KiB | 46.00 KiB/s, done.
Resolving deltas: 100% (135/135), done.

Shell> cd GLTF

pkg> activate .

(GLTF) pkg> instantiate
  Updating registry at `~/.Julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`

Le nouveau gestionnaire de paquets est génial! Nous n'avons pas besoin de "include avant using" ni de tout faire comme un paquet juste pour using. Nous avons maintenant un "projet" complet!

38
Gnimuc

Julia seule façon:

Julia> ENV["Julia_PKGDIR"] = "E:\\Julia-0.6.0\\portable"
"E:\\Julia-0.6.0\\portable"

Julia> ENV["Julia_PKGDIR"]
"E:\\Julia-0.6.0\\portable"

Julia> Pkg.init()
INFO: Initializing package repository E:\Julia-0.6.0\portable\v0.6
INFO: Cloning METADATA from https://github.com/JuliaLang/METADATA.jl

Cependant, le répertoire cache pointe toujours vers l'ancien dossier, j'ai donc vérifié pourquoi et je l'ai compris:

Julia> Base.LOAD_CACHE_PATH
1-element Array{String,1}:
 "C:\\Users\\kung\\.Julia\\lib\\v0.6"

Julia> Pkg.__init__()
2-element Array{String,1}:
 "E:\\Julia-0.6.0\\portable\\lib\\v0.6"
 "C:\\Users\\kung\\.Julia\\lib\\v0.6"

Julia> pop!(Base.LOAD_CACHE_PATH)
"C:\\Users\\kung\\.Julia\\lib\\v0.6"

Julia> Base.LOAD_CACHE_PATH
1-element Array{String,1}:
 "E:\\Julia-0.6.0\\portable\\lib\\v0.6"

En tant que fonction simple:

function set_Julia_dir(dir::String)
    ENV["Julia_PKGDIR"] = dir
    Pkg.init()
    Pkg.__init__()
    pop!(Base.LOAD_CACHE_PATH)
end

set_Julia_dir("E:\\Julia-0.6.0\\portable")
4
lama12345