129 votes

Ajout permanent d'un chemin de fichier à sys.path en Python

J'avais un fichier appelé example_file.py que je voulais utiliser à partir de divers autres fichiers, j'ai donc décidé d'ajouter example_file.py à sys.path et importez ce fichier dans un autre fichier pour l'utiliser. Pour ce faire, j'ai exécuté ce qui suit dans IPython.

import sys
sys.path
sys.path.append('/path/to/the/example_file.py')
print(sys.path)

Je pouvais voir le chemin que je venais d'ajouter, et lorsque j'ai essayé d'importer ce fichier à partir d'un autre répertoire, le chemin ressemblait à ceci :

import example_file

cela a bien fonctionné, mais une fois que je suis sorti d'IPython, que je l'ai entré à nouveau, et que j'ai vérifié la sys.path J'ai vu que le chemin que j'avais ajouté n'était pas présent, alors comment ajouter un chemin à sys.path de façon permanente en Python ?

129voto

BrenBarn Points 63718

Il y a plusieurs façons de procéder. L'une des plus simples est de créer un fichier my-paths.pth (comme décrit aquí ). Il s'agit simplement d'un fichier portant l'extension .pth que vous mettez dans votre système site-packages répertoire. Sur chaque ligne du fichier, vous mettez un nom de répertoire, donc vous pouvez y mettre une ligne avec /path/to/the/ et il ajoutera ce répertoire au chemin.

Vous pouvez également utiliser la variable d'environnement PYTHONPATH, qui est semblable à la variable PATH du système mais contient des répertoires qui seront ajoutés à sys.path . Voir la documentation .

Notez que peu importe ce que vous faites, sys.path contient répertoires pas des fichiers. Vous ne pouvez pas "ajouter un fichier à sys.path ". Vous ajoutez toujours son répertoire et ensuite vous pouvez importer le fichier.

7voto

Pandous Points 71

Cette méthode a fonctionné pour moi :

en ajoutant le chemin qui vous convient :

export PYTHONPATH=$PYTHONPATH:/path/you/want/to/add

vérification : vous pouvez exécuter la commande 'export' et vérifier le résultat ou vous pouvez le vérifier en utilisant cette commande :

python -c "import sys; print(sys.path)"

1voto

sam Points 438

Une autre façon d'aborder la question est d'installer le fichier en tant que module unique.

Créez un fichier d'installation comme ci-dessous (nommé pysetup.py) :

import setuptools

module_name = input("Enter module name: ")
setuptools.setup(
    name=module_name,
    py_modules=[module_name],
)

Vous pouvez ensuite installer cet installateur en l'utilisant lui-même avec python pysetup.py install Puis, à l'invite, entrez pysetup .

Maintenant pour installer n'importe quel fichier vous pouvez taper python -m pysetup install puis saisissez le nom du fichier. Vous pouvez également remplacer install avec develop pour installer en mode développement et continuer à éditer le fichier.

0voto

Patrik Staron Points 129

Dans une distribution Windows, dans le fichier suivant : <python_root_installation_directory>/python38._pth

il y a les lignes suivantes :

python38.zip
.
./lib
./lib/site-packages

# Uncomment to run site.main() automatically
#import site

Ainsi, avec ce contenu, on obtient les résultats suivants :

Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
>>> import sys
>>> sys.path
['C:\\Program Files\\Applications\\python_3_8_2\\python38.zip', 'C:\\Program Files\\Applications\\python_3_8_2', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages']

Donc après avoir ajouté cette ligne dans le fichier : ./lib/site-packages/win32ctypes il est présent dans le chemin :

Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
>>> import sys
>>> sys.path
['C:\\Program Files\\Applications\\python_3_8_2\\python38.zip', 'C:\\Program Files\\Applications\\python_3_8_2', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages', 'C:\\Program Files\\Applications\\python_3_8_2\\./lib/site-packages/win32ctypes']

De cette façon, vous n'avez pas besoin d'avoir PYTHONPATH variable présente sur le système et vous pouvez toujours avoir la fonctionnalité. L'inconvénient est que ceci est spécifique à l'installation, donc si vous avez 3 distributions différentes sur votre système, ceci n'affectera que l'installation choisie, alors que PYTHONPATH les affectera tous simultanément.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X