Comment définissez-vous votre pythonpath dans un virtualenv déjà créé?

106

Quel fichier dois-je modifier et comment? J'ai créé un environnement virtuel.

TIMEX
la source
vérifiez qu'il pointe vers les bons répertoires. Si vous n'en avez pas déjà un, cliquez sur le bouton Nouveau et créez-le.
11
Utilisez la commande add2virtualenv .
s29
5
add2virtualenv est une virtualenvwrappercommande. Cela ne fait pas partie de virtualenv.
kojiro

Réponses:

124

MODIFIER # 2

La bonne réponse est celle de @ arogachev .


Si vous souhaitez modifier l' PYTHONPATHutilisé dans un virtualenv, vous pouvez ajouter la ligne suivante au bin/activatefichier de votre virtualenv :

export PYTHONPATH="/the/path/you/want"

De cette façon, le nouveau PYTHONPATHsera défini chaque fois que vous utiliserez ce virtualenv.

EDIT: (pour répondre au commentaire de @ RamRachum)

Pour le restaurer à sa valeur d'origine deactivate, vous pouvez ajouter

export OLD_PYTHONPATH="$PYTHONPATH"

avant la ligne mentionnée précédemment et ajoutez la ligne suivante à votre bin/postdeactivatescript.

export PYTHONPATH="$OLD_PYTHONPATH"
mdeous
la source
1
Sera-t-il également supprimé deactivate?
Ram Rachum
1
Cela signifie donc qu'un environnement virtuel nouvellement créé a le PYTHONPATHchemin par défaut (le global) au lieu du chemin local virtualenv?
ducin
6
Cela a très bien fonctionné pour moi, je n'utilise pas virtualenvwrapper. La seule note est que je n'avais pas un tel script bin / postdeactivate, rathere activate avait une fonction de désactivation. La ligne de code doit donc y être placée, en prenant soin de l'envelopper dans une instruction if comme le reste des opérations de la fonction.
Niccolò
2
Il semble étrange que virtualenv ne le fasse pas par défaut.
Seth
2
Edit # 2 est un mensonge! :) La bonne réponse est celle de @ arjen-p-de-vries
Berriel
73

Le commentaire de @ s29 devrait être une réponse:

Une façon d'ajouter un répertoire à l'environnement virtuel est d'installer virtualenvwrapper (ce qui est utile pour de nombreuses choses), puis de faire

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Si vous souhaitez supprimer ces chemins, modifiez le fichier myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

La documentation sur virtualenvwrapper peut être trouvée à http://virtualenvwrapper.readthedocs.org/en/latest/

Une documentation spécifique sur cette fonctionnalité est disponible à l' adresse http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv

tjb
la source
6
pour supprimer:add2virtualenv -d
thecheech
1
vient de lier cette réponse à la mienne, car elle est bien meilleure
mdeous
27

Vous pouvez créer un .pthfichier contenant le répertoire à rechercher et le placer dans le site-packagesrépertoire. Par exemple:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

L'effet est le même que l' ajout /some/library/pathà sys.path, et restent locaux à la virtualenvconfiguration.

Arjen P. De Vries
la source
7
J'aime vraiment cette approche; pas aussi inconstant que l'ajout de lignes pour activer / désactiver et ne nécessite pas l'utilisation de virtualenvwrapper. Si vous préférez ne pas appeler python pour trouver le répertoire site-packages, c'est sur le chemin assez prévisible $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Documents sur les fichiers .pth: docs.python.org/3.6/library/site.html
Alec
2
Je ne voulais pas taper un chemin absolu, car mes espaces de travail se déplacent dans mon système de fichiers. Et, mon chemin de projet a des espaces. Alors, j'ai tapé la commande légèrement modifiée: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdEnsuite, j'ai désactivé mon virtualenv, et réactivé. Je pouvais maintenant exécuter le code de projet qui nécessitait de savoir où se trouvait mon répertoire de projet.
Jim DeLaHunt
4
C'est la bonne réponse. La modification du script fourni par le fournisseur ( /bin/activate) est une faute professionnelle et l'installation d'outils tiers est inférieure à l'utilisation d'un moyen intégré pour obtenir la même chose.
Rouge
2
  1. Initialisez votre virtualenv
cd venv

source bin/activate
  1. Définissez ou modifiez simplement votre chemin python en entrant la commande suivante:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. pour vérifier le chemin de python, entrez en python:
   python

      \>\> import sys

      \>\> sys.path
Siyaram Malav
la source
1

J'ai modifié mon script d'activation pour générer le fichier .virtualenvrc, s'il existe dans le répertoire actuel, et pour enregistrer / restaurerPYTHONPATH lors de l'activation / de la désactivation.

Vous pouvez trouver le activatescript corrigé ici.. Il s'agit d'un remplacement instantané du script d'activation créé par virtualenv 1.11.6.

Ensuite, j'ai ajouté quelque chose comme ça à mon .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
André Laszlo
la source
-20

C'est déjà répondu ici -> Mon environnement virtuel (python) provoque-t-il la rupture de mon PYTHONPATH?

UNIX / LINUX

Ajoutez "export PYTHONPATH = / usr / local / lib / python2.0" dans le fichier ~ / .bashrc et créez-le en tapant "source ~ / .bashrc" OR ". ~ / .Bashrc".

WINDOWS XP

1) Allez dans le panneau de configuration 2) Double-cliquez sur Système 3) Allez dans l'onglet Avancé 4) Cliquez sur Variables d'environnement

Dans la fenêtre Variables système, vérifiez si vous disposez d'une variable nommée PYTHONPATH. Si vous en avez déjà un, vérifiez qu'il pointe vers les bons répertoires. Si vous n'en avez pas déjà un, cliquez sur le bouton Nouveau et créez-le.

CODE PYTHON

Alternativement, vous pouvez également faire ci-dessous votre code: -

import sys
sys.path.append("/home/me/mypy") 
Ravikiran
la source
4
-1: Cela concerne le PYTHONPATH de l'utilisateur, pas le PYTHONPATH du virtualenv.
twneale