web-dev-qa-db-fra.com

Anaconda: Inclut de façon permanente des paquetages externes (comme dans PYTHONPATH)

Je sais comment installer des paquets dans Anaconda en utilisant conda install et aussi comment installer des paquets situés sur PyPi qui est décrit dans le manuel manual .

Mais comment puis-je inclure de manière permanente des packages/dossiers dans la PYTHONPATH d'un environnement Anaconda afin que le code sur lequel je travaille actuellement puisse être importé et reste disponible après un redémarrage?

Mon approche actuelle consiste à utiliser sys:

import sys
sys.path.append(r'/path/to/my/package')

ce qui n'est pas vraiment pratique.

Des allusions?

Merci d'avance!

17
Cord Kaldemeyer

J'ai trouvé deux réponses à ma question dans le forum Anaconda :

1.) Mettez les modules dans des packages de site, c’est-à-dire le répertoire $HOME/path/to/anaconda/lib/pythonX.X/site-packages qui est toujours sur sys.path. Cela devrait également fonctionner en créant un lien symbolique.

2.) Ajoutez un fichier .pth au répertoire $HOME/path/to/anaconda/lib/pythonX.X/site-packages. Cela peut être nommé n'importe quoi (il doit simplement se terminer par .pth). Un fichier .pth est simplement une liste, séparée par une nouvelle ligne, des noms de chemins complets des répertoires qui seront ajoutés à votre chemin au démarrage de Python.

Les deux fonctionnent directement et je suis allé pour la deuxième option car elle est plus flexible.

*** METTRE À JOUR:

3.) Créez un setup.py dans le dossier de votre paquet et installez-le en utilisant pip install -e /path/to/package, qui est l'option la plus propre de mon point de vue car vous pouvez également voir toutes les installations en utilisant pip list.

Merci quand même!

28
Cord Kaldemeyer

La solution à privilégier serait de construire votre propre paquet conda (information ici ).

Une autre solution consisterait à créer un lien entre le répertoire de votre package et n’importe quel répertoire de sys.path. De cette manière, lorsque vous demanderez à python d'importer votre paquet, anaconda effectuera une recherche dans ses divers répertoires sys.path et lira le lien vers votre paquet comme si ce paquet était dans l'un des répertoires sys.path.

La liaison d'un répertoire peut être réalisée facilement avec la commande ln (nom_lien). Par exemple:

ln -s /path/to/my/package /path/to/anaconda/lib/python2.7/site-packages/

Le lien ci-dessus vous permettra d'importer votre paquet dans l'environnement par défaut d'anaconda à partir de n'importe quel répertoire. Cela n'affectera aucun des autres environnements. 

Si vous souhaitez ajouter le package à un environnement spécifique (par exemple, "myenv") dans anaconda, vous pouvez lier le package à l'un des chemins système de cet environnement particulier:

ln -s /path/to/my/package /path/to/anaconda/env/myenv/lib/python2.7/site-packges/

Notez les points suivants:

  • Le fait de lier votre répertoire de package à un chemin système plutôt que de le déplacer réellement vers un chemin système vous permet de conserver votre paquet dans le répertoire de votre choix.
  • L'indicateur -s génère un lien symbolique (un peu comme un raccourci). Si vous déplacez le répertoire de votre paquet, le lien ne fonctionnera pas. Exécuter ln sans l'indicateur -s génère un lien dur (comme une copie miroir) qui ne sera pas affecté par le déplacement (ou même la suppression ..) du répertoire du paquet. Les avantages et les inconvénients des liens symboliques et des liens physiques font l’objet d’un débat ici

  • Les utilisateurs Windows devraient utiliser mklink. Pour plus d'informations, regardez ici .

4
Mark Hannel

Juste pour ajouter à la réponse de Cord Kaldemeyer ci-dessus, pour la 2e option. Si vous souhaitez uniquement créer un lien vers un environnement conda particulier, ajoutez le fichier .pth à ~/anaconda3/envs/{NAME_OF_ENVIRONMENT}/lib/pythonX.X/site-packages/.

1
Vik