Question Importer des fichiers de différents dossiers


J'ai la structure de dossier suivante.

application/app/folder/file.py

et je veux importer certaines fonctions de file.py dans un autre fichier Python qui réside dans

application/app2/some_folder/some_file.py

J'ai essayé

from application.app.folder.file import func_name

et quelques autres tentatives, mais je n'ai pas réussi à importer correctement. Comment puis-je faire ceci?


697
2017-12-08 02:07


origine


Réponses:


Par défaut, vous ne pouvez pas. Lors de l'importation d'un fichier, Python ne recherche que le répertoire en cours, le répertoire d'exécution du script de point d'entrée et sys.path qui inclut des emplacements tels que le répertoire d'installation du paquet (c'est en fait un peu plus complexe que cela, mais cela couvre la plupart des cas).

Cependant, vous pouvez ajouter au chemin Python à l'exécution:

# some_file.py
import sys
sys.path.insert(0, '/path/to/application/app/folder')

import file

815
2017-12-08 02:12



Rien de mal avec:

from application.app.folder.file import func_name

Assurez-vous juste dossier contient également un __init__.pyCela lui permet d'être inclus dans un package. Je ne sais pas pourquoi les autres réponses parlent de PYTHONPATH.


402
2018-02-24 18:27



Lorsque les modules sont dans des emplacements parallèles, comme dans la question:

application/app2/some_folder/some_file.py
application/app2/another_folder/another_file.py

Cette sténographie rend un module visible à l'autre:

import sys
sys.path.append('../')

42
2017-11-15 14:55



Je pense qu'un moyen propre serait d'utiliser la variable d'environnement PYTHONPATH comme décrit dans la documentation: Python2, Python3

export PYTHONPATH=$HOME/dirWithScripts/:$PYTHONPATH
# Windows users: use "set" instead of "export"

28
2018-02-19 11:00



D'après ce que je sais, ajouter un __init__.py fichier directement dans le dossier des fonctions que vous souhaitez importer fera le travail.


21
2017-11-24 04:31



Considérant application en tant que répertoire racine de votre projet python, créez un espace vide __init__.py déposer application, app et folder Dossiers. Puis dans votre some_file.py Apportez les modifications suivantes pour obtenir la définition de func_name:

import sys
sys.path.insert(0, r'/from/root/directory/application')

from application.app.folder.file import func_name ## You can also use '*' wildcard to import all the functions in file.py file.
func_name()

16
2017-10-15 08:34



Les réponses ici manquent de clarté, ceci est testé sur Python 3.6

Avec cette structure de dossiers:

main.py
|
---- myfolder/myfile.py

myfile.py a le contenu:

def myfunc():
    print('hello')

La déclaration d'importation dans main.py est:

from myfolder.myfile import myfunc
myfunc()

et cela va imprimer Bonjour.


13
2018-02-19 03:22



A travaillé pour moi dans python3 sur Linux

import sys  
sys.path.append(pathToFolderContainingScripts)  
from scriptName import functionName #scriptName without .py extension  

12
2017-08-16 15:24



Votre problème est que Python cherche dans le répertoire Python pour ce fichier et ne le trouve pas. Vous devez spécifier que vous parlez du répertoire dans lequel vous êtes et non du répertoire Python.

Pour ce faire, vous changez ceci:

from application.app.folder.file import func_name

pour ça:

from .application.app.folder.file import func_name

En ajoutant le point que vous dites regardez dans ce dossier pour le dossier de l'application au lieu de regarder dans le répertoire Python.


11
2018-02-11 00:29



Cela fonctionne pour moi sur Windows

# some_file.py on mainApp/app2 
import sys
sys.path.insert(0, sys.path[0]+'\\app2')

import some_file

10
2018-03-27 19:16