logo

Python: importa el mòdul des de diferents directoris

Mentre treballem en grans projectes podem enfrontar-nos a una situació en què volem importar a mòdul des d'un directori diferent. Però per algun motiu, és possible que el mòdul no s'importi correctament. Ara no us preocupeu si el vostre mòdul no s'ha importat correctament. En aquest article, parlarem de maneres d'importar un mòdul des d'un altre directori.

Nota: Un mòdul és només un programa de Python que acaba amb .py extensió i una carpeta que conté un mòdul es converteix en un paquet.



Estructura del directori:

 - Folder_1 - main.py - Folder_2 - module1.py>

Suposem que, per importar com importar un fitxer a Python, tenim dues carpetes diferents, una conté main.py, que és el nostre fitxer principal de Python on volem importar el mòdul1 de la Carpeta_2.

Mòdul 1: conté dues funcions anomenades sumar i parell_par. La funció add agafarà dos arguments i retornarà la suma d'ells. La funció odd_even només en prendrà una argument i imprimir Fins i tot si el nombre és parell o imprimir Impar si el nombre és senar.



module1.py

Python 3






# creating a simple add function> def> add(a, b):> >return> a>+>b> # creating a simple odd_even function> # to check if the number is odd or even> def> odd_even(n):> >if> n>%> 2> =>=> 0>:> >print>(>'Even'>)> >else>:> >print>(>'Odd'>)>

>

>

Si simplement intentem importar mòdul 1 des de Carpeta_2, ens trobarem amb el següent error.

main.py

Python 3




# importing module1 from another folder> import> Folder_2> # calling odd_even function> module1.odd_even(>5>)>

>

>

Sortida:

Error

ModuleNotFoundError , perquè per defecte l'intèrpret de Python comprovarà el fitxer només al directori actual, i hem d'establir la ruta del fitxer manualment per importar els mòduls des d'un altre directori. Ho podem fer de diferents maneres. Aquestes maneres es discuteixen a continuació amb detall.

Mètode 1: importa el mòdul des de diferents directoris mitjançant el mòdul sys

Podem utilitzar sys.path afegir la ruta de la nova carpeta diferent (la carpeta des d'on volem importar els mòduls) a la ruta del sistema de manera que Python també pugui cercar el mòdul en aquest directori si no troba el mòdul al seu directori actual. Com sys.path cau sota el classe de tipus llista per tant, podem utilitzar fàcilment el mètode d'inserció per afegir la ruta de la carpeta.

Python 3




# importing sys> from> module1>import> odd_even, add> import> sys> # adding Folder_2 to the system path> sys.path.insert(>0>,>'/home/amninder/Desktop/Folder_2'>)> # importing the add and odd_even> # function> # calling odd_even function> odd_even(>5>)> # calling add function> print>(>'Addition of two number is :'>, add(>2>,>2>))>

>

>

Sortida :

Utilitzant sys

Mètode 2: Ús del PYTHONPATH variable d'entorn

De la mateixa manera, si no voleu utilitzar el sys mòdul per establir la ruta del nou directori. Podeu assignar una ruta de directori a la variable PYTHONPATH i encara fer funcionar el vostre programa.

En Linux , podem utilitzar l'ordre següent al terminal per establir el camí:

exportar PYTHONPATH='camí/a/directori'

Al sistema Windows:

SET PYTHONPATH=camí/al/directori

Per veure si la variable PYTHONPATH conté el camí de la nova carpeta, podem utilitzar l'ordre següent:

eco $PYTHONPATH

Python 3




# importing the add and odd_even function> from> module1>import> odd_even, add> # calling odd_even function> odd_even(>5>)> # calling add function> print>(>'Addition of two number is :'>, add(>2>,>2>))>

>

>

Sortida:

Utilitzant PYTHONPATH

Suposem que tenim una estructura de directoris com aquesta:

- project - Folder_1 - main.py - Folder_2 - subfolder - new.py>

Ara, voleu importar el new.py mòdul de Carpeta_2 a la Carpeta_1 del nostre projecte main.py dossier.

Sintaxi:

de project.folder.subfolder.filename import function name

Python 3




matemàtiques java pow

# importing sys> import> sys> # adding Folder_2/subfolder to the system path> sys.path.insert(>0>,>'/home/amninder/Desktop/project/Folder_2/subfolder'>)> # importing the hello> from> new>import> hello> # calling hello function> hello()>

>

>

Sortida:

Sortida