Importación de Python desde un directorio principal: una guía rápida

Importación de Python desde un directorio principal: una guía rápida

¿Alguna vez se encontró metido hasta las rodillas en archivos de Python, luchando por importar un módulo desde un directorio principal? Si es así, estás en buena compañía. El sistema de importación de Python a veces puede parecer un laberinto sinuoso, pero no se preocupe, ¡estamos aquí para ayudarlo a navegar!

Para importar desde un directorio principal en Python, puede usar el módulo sys . Al insertar el directorio requerido en la lista sys.path, le proporciona al intérprete la ubicación del módulo deseado. Después de modificar sys.path, puede importar el módulo de destino utilizando la declaración de importación estándar.

Importación de Python desde un directorio principal: una guía rápida

En este artículo, exploraremos cómo puede importar desde directorios principales en Python. Además, veremos casos de uso específicos de importación que lo ayudarán a comprender mejor la estructura subyacente de los directorios.

¡Entremos en ello!

Tabla de contenido

Cómo importar en Python

Vamos a saltar directamente al tema de hoy: importar en Python. Esas simples líneas de código al comienzo de sus scripts de Python que a menudo comienzan con import o from ? Esos son su boleto para aprovechar el poder de las amplias bibliotecas y módulos de Python.

En esta sección, repasaremos el código para importar desde el directorio principal en Python. También veremos los posibles errores que pueden surgir al importar módulos desde el directorio principal.

¿Qué es el sistema de importación de Python?

El sistema de importación de Python permite la reutilización y organización eficientes del código. Le facilita el mantenimiento de proyectos complejos.

Para importar un módulo o paquete en Python, puede usar la declaración de importación . Los módulos se distribuyen como paquetes, que son directorios con una colección de archivos de Python.

Para importar un módulo desde el directorio principal, puede usar el módulo sys.path para agregar el directorio principal a la ruta de Python. Después de agregar el directorio principal, puede importar el módulo usando la declaración de importación .

Demostración de importación desde el directorio principal

Para brindarle una demostración clara de la importación desde el directorio principal, repasemos una serie de pasos para ayudarlo a comprender todo el proceso.

1. Crear los directorios y archivos necesarios

Primero, abra su explorador de archivos y navegue hasta la unidad local deseada. Estoy usando mi unidad E local, por lo tanto, crearé un nuevo directorio llamado my_project .

Dentro de my_project , crea otro directorio llamado module_dir .

Entonces, ahora deberías tener:

E:
|-- /my_project
    |-- /module_dir

2. Agregar archivos de Python

A continuación, cree un nuevo archivo .py llamado main.py en el directorio my_project .

Después de eso, cree otro archivo de Python llamado my_module.py en module_dir .

Su estructura ahora debería verse así:

E:
|-- /my_project
    |-- main.py
    |-- /module_dir
        |-- my_module.py

Si está utilizando Visual Studio Code , la estructura de su directorio debería tener el siguiente aspecto:

Importación de Python desde un directorio principal: una guía rápida

3. Editando los archivos de Python

Abra su my_module.py y agregue el siguiente código:

def my_function():
    print("Hello from my_module!")

Luego continúe, guarde y cierre el archivo.

Ahora, abra main.py y agregue el siguiente código:

import sys
import os

# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))

# Add the parent directory to sys.path
sys.path.append(parent_dir)

# Import the module from the parent directory
from module_dir import my_module

# Use a function from my_module
my_module.my_function()

En este script, primero estamos averiguando la ubicación del directorio un nivel por encima del script que estamos ejecutando (ese es el directorio principal). Luego, le decimos a Python que también busque en esta carpeta principal cuando necesite importar módulos.

Después de hacer eso, estamos importando un módulo llamado my_module que está dentro de un directorio llamado module_dir ubicado en este directorio principal. Finalmente, llamamos a una función llamada my_function desde my_module .

Después de agregar el código anterior, guarde y cierre el archivo.

4. Ejecutar el código

Para ejecutar este código, abra la terminal del editor de código deseado y ejecute el archivo main.py. Si está utilizando Visual Studio Code, el resultado debería ser similar al siguiente:

Importación de Python desde un directorio principal: una guía rápida

main.py importará la función desde my_module.py , como se muestra en la imagen de arriba.

Este ejemplo muestra en detalle cómo funciona el sistema de archivos y la importación desde el directorio principal en Python.

Cómo manejar ImportError y ModuleNotFoundError en Python

Python generará una excepción ImportError cuando el módulo que está tratando de importar no se encuentra durante el proceso de importación.

ImportError es una subclase de la excepción ModuleNotFoundError . Se genera cuando el módulo importado no existe o no se puede cargar.

The following are examples of scenarios when these may occur:

  • The module or package is not in the sys.path.

  • The module or package name is misspelled or does not exist.

  • There is a problem with the module’s code, preventing it from being properly imported.

When encountering these errors, you could use the following solutions:

  • Double-checking the spelling and existence of the module or package.

  • Adding the necessary directory to sys.path using append() or insert().

  • Fixing any issues in the module’s code that may be hindering its import.

To learn more about handling errors in Python, check the following video out:

After understanding how importing works in Python, it’s also important that you gain some familiarity with Python’s directory structure.

Directory structure and importing go hand-in-hand with each other as importing requires an understanding of the directory structure, so let’s go over that in the next section.

Python Directory Structure

Understanding the Python directory structure is more than just knowing where to put your scripts or where to find that library you just installed.

It’s like having a clean, well-organized desk: you’ll know exactly where everything is, and your productivity will skyrocket, so let’s go over the basics in this section.

Package Structure

The directory structure of a Python project is essential for correct organization. If you structure your package properly, it’ll help you minimize the chance of naming conflicts. Furthermore, it’ll also enable you to easily navigate through your filesystem.

The following is a typical Python project directory structure:

project/
?
??? package1/
?   ??? __init__.py
?   ??? module1.py
?   ??? module2.py
?
??? package2/
?   ??? __init__.py
?   ??? module3.py
?   ??? module4.py
?
??? main.py

In the example above, project is the root directory containing two sub-packages, package1 and package2. Each package has its .py files and a unique init.py file.

What Are init.py Files?

init.py files are important for defining the package’s behavior when it’s imported. These files are executed when their parent package is imported.

The init.py files can be empty or contain initialization code. They also indicate to Python that the folder should be treated as a package.

To import a module from a parent directory, you can use the sys.path method. You’ll need to append the parent directory path to sys.path.

To demonstrate this, let’s build up on our previous example. We had the following directory structure:

E:
|-- /my_project
    |-- main.py
    |-- /module_dir
        |-- my_module.py

Now, let’s add the init.py file to my_module directory. You can leave this file empty for now. Its presence indicates to Python that this directory should be treated as a package.

Your directory structure should now look like the following:

Importación de Python desde un directorio principal: una guía rápida

After adding the init.py file, you must make changes to your main.py file to instruct it to treat the module_dir folder as a package. Your main.py file should now have the following code:

import sys
import os

# Get the parent directory
parent_dir = os.path.dirname(os.path.realpath(__file__))

# Add the parent directory to sys.path
sys.path.append(parent_dir)

# Import my_module from the package module_dir
import module_dir

# Call my_function from my_module
my_module.my_function()

In this example, main.py imports the module_dir package, and then calls the function my_function() from my_module within that package.

Note the change in the call to the my_function; because we are now treating module_dir as a package, we have to include the package name when calling functions from modules within the package.

The output will be similar to the previous one. The only change we made was to treat module_dir as a package with the inclusion of init.py file.

Importación de Python desde un directorio principal: una guía rápida

Python Search Path

Ever wondered how Python knows where to find the modules you’re trying to import? Or maybe you’ve encountered an annoying ‘ModuleNotFoundError’ and couldn’t figure out why?

In this section, we’re going to tackle these mysteries head-on and delve into the concept of the Python search path.

The Python search path, also known as sys.path, is Python’s little roadmap to finding all the modules you need. Like a diligent scout, Python uses this path to scour your computer for modules whenever you use the import statement.

Understanding how it works can save you from headaches and help you troubleshoot when things go awry, so let’s go over some basics!

1. What is the sys.path List in Python?

The sys.path list is a crucial component when importing modules in a directory. It’s a list of strings that represents the module search path.

Each string in the list is a directory location where Python looks for modules (*.py files) or packages (folders containing init.py files).

The following example shows you how to view your current sys.path list:

import sys

for path in sys.path:
    print(path)

After running the above code, you’ll see an output like the following:

Importación de Python desde un directorio principal: una guía rápida

You can also add new directories to the sys.path list so that Python finds your custom modules.

For instance:

import sys
sys.path.append('/path/to/new/module/directory')

2. What are PythonPath Environment Variables?

Another way you can manage the module search path is by using the PYTHONPATH environment variable.

PYTHON PATH is a string containing a list of directories that is appended to the default sys.path list. This means you can add directories to PYTHONPATH. This allows Python to search for modules in those directories when importing.

Setting the PYTHONPATH environment variable depends on your operating system:

  • Unix-based systems (Linux, macOS): You can use the export command in your terminal or add the following line to your shell configuration file (.bashrc, .zshrc or similar):

    export PYTHONPATH="/path/to/module/directory1:/path/to/module/directory2"
  • Windows OS: Go to System Properties > Environment Variables, and under User variables, click New to create a new variable with the name: “PYTHONPATH” and the value as a list of directory paths separated by a semi-colon (;).

    C:pathtomoduledirectory1;C:pathtomoduledirectory2
    

Once the path variable is set, you can run your Python script. It will search for imported modules in those directories as well as the default ones in sys.path.

When organizing your code into files and folders, you’ll frequently come across relative imports and adjusting sys.path.

In the next section, we’ll explore both and see how they fit into the framework for Python imports.

Parent Directory Imports

You can organize code into different folders and files to improve both readability and maintainability. However, importing modules from parent directories can be a bit tricky.

In this section, we’ll discuss two approaches to achieve this:

  1. Relative Imports

  2. Adjusting sys.path

1. Relative Imports

Relative imports allow you to import modules based on their relative position in the directory hierarchy.

You can use the dot (.) notation to refer to the current directory or double dot (..) notation to refer to the parent directory.

Suppose you have a directory structure like the following:

parent_directory/
?
??? module_a.py
?
??? sibling_directory/
    ??? module_b.py

Inside module_b.py, you can use relative imports to access module_a.py:

from .. import module_a

The double dot refers to the parent directory. It is important to note that relative imports only work if the parent directory is a package (has an init.py file).

2. Adjusting sys.path

You can also import modules from a parent directory by modifying the sys.path.

Antes de la declaración de importación , puede agregar la ruta del directorio principal a sys.path . Primero, necesita importar el módulo sys . Luego, usa el módulo os para obtener la ruta del directorio principal.

Suponga que tiene una estructura de directorios como la siguiente:

project_root/
?
??? parent_directory/
?   ??? module_a.py
?
??? current_directory/
    ??? module_b.py

En module_b.py , puede agregar la ruta del directorio principal a sys.path de esta manera:

import os
import sys

parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(parent_dir)

import module_a

Ahora, Python buscará module_a.py en el directorio principal cuando lo importe en module_b.py .

Puede usar el enfoque de importación relativa o el enfoque sys.path para importar módulos desde un directorio principal.

Cómo trabajar con módulos y paquetes

En Python, los módulos y paquetes son una forma de organizar y reutilizar el código. Puede usarlos para dividir proyectos complejos en partes manejables.

Esta sección discutirá cómo trabajar con módulos y paquetes en Python . También incluiremos conceptos clave como:

  1. Espacios de nombres

  2. Variables y Definiciones

  3. Importar estados de cuenta

1. ¿Qué son los espacios de nombres?

Los espacios de nombres en Python son una forma de garantizar que los nombres de variables, funciones y clases no entren en conflicto entre diferentes módulos.

Hay diferentes niveles de espacios de nombres en Python, como:

  • Espacio de nombres global: se refiere al espacio de nombres de todo el módulo.

  • Espacio de nombres local: se refiere al espacio de nombres dentro de una función o clase.

Puede obtener un nombre en un espacio de nombres particular con la notación de espacio de nombres [nombre] .

2. ¿Qué son las variables y las definiciones?

En un script de Python, puede definir variables, funciones y clases. Estas definiciones se almacenan en el espacio de nombres del script.

Al importar el script como un paquete, puede acceder y reutilizar sus definiciones en otras partes de su proyecto.

El siguiente es un ejemplo de cómo definir una variable y una función en el mismo espacio de nombres:

# my_variable.py
my_variable = 5

def my_function(x):
    return x + my_variable

Este módulo tiene una variable mi_variable y una función mi_función .

Para ejecutar este código, puede crear un nuevo archivo llamado my_variable.py y colocar el código allí como se muestra a continuación:

Importación de Python desde un directorio principal: una guía rápida

Ahora, puede importar este archivo y usarlo en otro script como se muestra a continuación:

Importación de Python desde un directorio principal: una guía rápida

Después de ejecutar el archivo main.py , obtendrá un resultado similar al siguiente:

Importación de Python desde un directorio principal: una guía rápida

3. ¿Qué son las declaraciones de importación?

Puede importar archivos, módulos o paquetes en Python con la declaración de importación

Algunos métodos de importación comunes son:

  • import module_name : este método importa un módulo, haciendo que todas sus definiciones sean accesibles con la notación module_name.definition_name .

import mymodule

result = mymodule.my_function(3)
  • from module_name import some_definition : este método importa una definición específica de un módulo, lo que le permite usarlo directamente sin el prefijo del módulo.

from mymodule import my_function

result = my_function(3)
  • from module_name import * : este método importa todas las definiciones de un módulo, pero no se recomienda ya que puede generar conflictos de nombres.

Pensamientos finales

Comprender cómo importar desde un directorio principal en Python es importante para mantener una base de código organizada.

Este conocimiento te permite diseñar tus proyectos de una forma más modular. También aumenta la reutilización de su código. Al estructurar su código en módulos y paquetes separados, puede evitar repetir el código y facilitar su mantenimiento y actualización.

La habilidad para usar declaraciones import y from es más valiosa cuando trabaja en proyectos más grandes donde las funcionalidades se dividen en diferentes directorios.

Al saber cómo ajustar correctamente la ruta de Python para importar módulos, puede acceder a las funcionalidades definidas en un directorio mientras trabaja en otro.

Recuerde, la clave para dominar Python, o cualquier lenguaje de programación, radica en la práctica constante y la curiosidad insaciable. Entonces, sigue explorando, sigue experimentando y sigue desafiándote a ti mismo.

Con esta guía rápida, debe estar bien equipado para manejar cualquier rompecabezas de importación que Python le presente. Pero no te detengas aquí. ¡Hay todo un universo de técnicas y trucos de Python esperando a ser descubiertos!


Qué es uno mismo en Python: ejemplos del mundo real

Qué es uno mismo en Python: ejemplos del mundo real

Qué es uno mismo en Python: ejemplos del mundo real

Cómo guardar y cargar un archivo RDS en R

Cómo guardar y cargar un archivo RDS en R

Aprenderá a guardar y cargar objetos desde un archivo .rds en R. Este blog también cubrirá cómo importar objetos desde R a LuckyTemplates.

Revisión de los primeros N días hábiles: una solución de lenguaje de codificación DAX

Revisión de los primeros N días hábiles: una solución de lenguaje de codificación DAX

En este tutorial del lenguaje de codificación DAX, aprenda a usar la función GENERAR y a cambiar dinámicamente el título de una medida.

Showcase Insights utilizando la técnica de elementos visuales dinámicos de subprocesos múltiples en LuckyTemplates

Showcase Insights utilizando la técnica de elementos visuales dinámicos de subprocesos múltiples en LuckyTemplates

Este tutorial cubrirá cómo usar la técnica de elementos visuales dinámicos de subprocesos múltiples para crear información a partir de visualizaciones de datos dinámicos en sus informes.

Introducción al contexto de filtro en LuckyTemplates

Introducción al contexto de filtro en LuckyTemplates

En este artículo, repasaré el contexto del filtro. El contexto del filtro es uno de los temas principales que cualquier usuario de LuckyTemplates debería conocer inicialmente.

Los mejores consejos para usar las aplicaciones en el servicio en línea de LuckyTemplates

Los mejores consejos para usar las aplicaciones en el servicio en línea de LuckyTemplates

Quiero mostrar cómo el servicio en línea de LuckyTemplates Apps puede ayudar a administrar diferentes informes e información generada a partir de varias fuentes.

Analice los cambios en el margen de beneficio a lo largo del tiempo: análisis con LuckyTemplates y DAX

Analice los cambios en el margen de beneficio a lo largo del tiempo: análisis con LuckyTemplates y DAX

Aprenda a calcular los cambios de su margen de beneficio utilizando técnicas como la bifurcación de medidas y la combinación de fórmulas DAX en LuckyTemplates.

Ideas de materialización para cachés de datos en DAX Studio

Ideas de materialización para cachés de datos en DAX Studio

Este tutorial analizará las ideas de materialización de cachés de datos y cómo afectan el rendimiento de DAX al proporcionar resultados.

Informes comerciales con LuckyTemplates

Informes comerciales con LuckyTemplates

Si todavía usa Excel hasta ahora, este es el mejor momento para comenzar a usar LuckyTemplates para sus necesidades de informes comerciales.

¿Qué es la puerta de enlace de LuckyTemplates? Todo lo que necesitas saber

¿Qué es la puerta de enlace de LuckyTemplates? Todo lo que necesitas saber

¿Qué es la puerta de enlace de LuckyTemplates? Todo lo que necesitas saber