web-dev-qa-db-fra.com

comment définir différentes variables PYTHONPATH pour python3 et python2 respectivement

Je veux ajouter un chemin de bibliothèque spécifique uniquement à python2. Après avoir ajouté export PYTHONPATH="/path/to/lib/" à mon .bashrc, toutefois, l’exécution de python3 génère l’erreur suivante: Votre PYTHONPATH pointe sur un répertoire de paquets de sites pour Python 2.x mais vous utilisez Python 3.x!

Je pense que cela est dû au fait que python2 et python3 partagent la variable PYTHONPATH commune.

Donc, puis-je définir différentes variables PYTHONPATH respectivement pour python2 et python3. Si non, comment puis-je ajouter un chemin de bibliothèque exclusivement à une version particulière de python?

33
Douglas Su

Vous pouvez créer un fichier de configuration mymodule.pth sous lib/site-packages (sous Windows) ou lib/pythonX.Y/site-packages (sous Unix et Macintosh), puis ajoutez une ligne contenant le répertoire à ajouter au chemin d'accès python.

De docs.python2 et docs.python3 :

Un fichier de configuration de chemin est un fichier dont le nom a la forme name.pth et qui existe dans l’un des quatre répertoires mentionnés ci-dessus; son contenu est constitué d'éléments supplémentaires (un par ligne) à ajouter à sys.path. Les éléments non existants ne sont jamais ajoutés à sys.path et aucune vérification n'est faite quant au fait que l'élément se réfère à un répertoire plutôt qu'à un fichier. Aucun élément n'est ajouté à sys.path plus d'une fois. Les lignes vides et les lignes commençant par # sont ignorées. Les lignes commençant par import (suivies d'un espace ou d'une tabulation) sont exécutées.

19
WaKo

PYTHONPATH est un peu un bidouillage en ce qui concerne la gestion des paquets. Une "jolie" solution consisterait à empaqueter votre bibliothèque et à installer.

Cela peut sembler plus délicat que ça, alors laissez-moi vous montrer comment ça marche.

Supposons que votre "paquet" ait un seul fichier nommé wow.py et que vous le gardiez dans /home/user/mylib/wow.py.

Créez le fichier /home/user/mylib/setup.py avec le contenu suivant:

from setuptools import setup

setup(name="WowPackage",
      packages=["."],
)

Ça y est, vous pouvez maintenant "installer" correctement votre paquet dans la distribution Python de votre choix sans avoir à vous soucier de PYTHONPATH. En ce qui concerne "l'installation correcte", vous avez au moins trois options:

  • "Vraiment correct". Copiera votre code dans votre répertoire site-packages python:

    $ python setup.py install
    
  • "Développement". Ajoutera seulement un lien depuis les paquets-sites python vers /home/user/mylib. Cela signifie que les modifications apportées au code de votre répertoire auront un effet.

    $ python setup.py develop
    
  • "Utilisateur". Si vous ne souhaitez pas écrire dans les répertoires système, vous pouvez installer le package ("correctement" ou "en mode de développement") dans le répertoire /home/user/.local, dans lequel Python les trouvera également. Pour cela, ajoutez simplement --user à la commande.

    $ python setup.py install --user
    $ python setup.py develop --user
    

Pour supprimer un paquet installé en mode développement, faites

$ python setup.py develop -u

ou

$ python setup.py develop -u --user

Pour supprimer un paquet "installé" correctement, faites

 $ pip uninstall WowPackage

Si votre paquet est plus intéressant qu'un seul fichier (par exemple, vous avez des sous-répertoires et autres), listez-les simplement dans le paramètre packages de la fonction setup (vous aurez besoin de tout lister de manière récursive, vous utiliserez donc une fonction d'assistance pour les bibliothèques plus grandes ). Une fois que vous avez compris, assurez-vous de lire un manuel plus détaillé aussi.

En fin de compte, allez contribuer votre paquet à PyPI - c'est aussi simple que d'appeler python setup.py sdist register upload (vous aurez cependant besoin d'un nom d'utilisateur PyPI).

21
KT.

J'ai constaté qu'il n'y avait aucun moyen de modifier PYTHONPATH uniquement pour python2 ou uniquement pour python3. Je devais utiliser un fichier .pth .

Ce que je devais faire était:

  • assurez-vous que le répertoire est créé à mon domicile: $HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
  • créer un fichier .pth dans ce répertoire 
  • vérifier que votre fichier .pth fonctionne
  • terminé

Pour plus d'informations sur `.pth. la syntaxe des fichiers et leur fonctionnement, veuillez consulter: python2 docs et python3 docs .

(Fichiers .pth en quelques mots: lorsque votre interprète python démarrera, il examinera certains répertoires et le fichier .pth, ouvrira ces fichiers, analysera les fichiers et les ajoutera à votre sys.path (le même comportement que PYTHONPATH) modules python situés dans les répertoires disponibles pour une importation normale.)

0
Trevor Boyd Smith