[100 días competentes en python] Día 16: python module_module directorio de búsqueda y método de procesamiento al importar excepciones de módulos

Tabla de contenido

1 Buscar en el directorio donde se encuentra el módulo

2 El módulo no está en el directorio de búsqueda

2.1 Agregue el directorio donde se encuentra el módulo a la variable de entorno PYTHONPATH

2.2 modificar sys.path

2.3 Importar usando ruta absoluta

2.4 Copie el módulo a cualquier directorio en la ruta de búsqueda de Python

2.5 Resumen

3 Manejo de excepciones de otros módulos importados

3.1 El módulo no está instalado

 3.2 Nombre del módulo mal escrito

3.3 Falta el archivo del módulo

3.4 Problemas con la ruta del módulo


1 Buscar en el directorio donde se encuentra el módulo

        En Python, cuando importa un módulo, el intérprete busca los directorios donde se encuentra el módulo en un orden específico. Estos directorios incluyen:

  1. Directorio de trabajo actual: Python primero busca en el directorio de trabajo actual donde se ejecuta el script.

  2. Variable de entorno PYTHONPATH: si se establece la variable de entorno PYTHONPATH, Python buscará módulos en el orden de los directorios especificados allí.

  3. Directorio de instalación de Python: se establecerá un directorio de biblioteca estándar predeterminado cuando se instale Python, y la búsqueda de módulos también se realizará en este directorio.

  4. Directorio de bibliotecas de terceros: si usa una biblioteca de terceros, Python buscará módulos en el directorio de instalación de la biblioteca de terceros.

El orden de búsqueda es de adelante hacia atrás y la búsqueda se detiene una vez que se encuentra un módulo coincidente.

Python generará una excepción si no se encuentra el módulo especificado ModuleNotFoundError.

Puede ver la ruta de búsqueda del módulo de Python con el siguiente código:

import sys

print(sys.path)

El código anterior generará una lista que contiene la ruta de búsqueda, el primer elemento es el directorio de trabajo actual, luego el directorio especificado en la variable de entorno PYTHONPATH y luego el directorio de instalación de Python y el directorio de la biblioteca de terceros.

como sigue:

2 El módulo no está en el directorio de búsqueda

Si el módulo a importar no está en el directorio de búsqueda, a menudo aparecen los siguientes errores, como: ModuleNotFoundError: No hay ningún módulo llamado 'numpy'

En este caso, si no hay un paquete de módulo de terceros instalado, use pip install numpy para instalarlo.

También para módulos personalizados. como

 

 En este caso, puede tomar los siguientes métodos para resolver el problema:

2.1 Agregue el directorio donde se encuentra el módulo a la variable de entorno PYTHONPATH

        Agregar el directorio donde se encuentra el módulo a la variable de entorno PYTHONPATH permite que el intérprete de Python busque el módulo en el directorio especificado.

En el sistema Windows, puede agregar el directorio a la variable de entorno PYTHONPATH con el siguiente comando, ingrese en bash:

set PYTHONPATH=%PYTHONPATH%;/path/to/module_directory

En los sistemas Linux y macOS, el directorio se puede agregar a la variable de entorno PYTHONPATH con el siguiente comando:

export PYTHONPATH=$PYTHONPATH:/path/to/module_directory

Al hacerlo, el intérprete de Python buscará automáticamente módulos en el directorio especificado al iniciarse.

2.2 modificar sys.path

        Utilice el método en una secuencia de comandos de Python sys.path.append()para agregar el directorio donde se encuentra el módulo a la ruta de búsqueda.

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

         Si conoce la ruta absoluta del módulo, también puede usar sys.path.append()Agregar la ruta absoluta a la ruta de búsqueda de Python y luego importimportar el módulo con la instrucción. Hacer esto también resuelve el problema de que los módulos no estén en la ruta de búsqueda.

        Supongamos que tenemos un archivo de módulo personalizado mymodule.py, ubicado /path/to/module_directoryen un directorio, y sabemos que su ruta absoluta es /path/to/module_directory/mymodule.py. Ahora queremos importar este módulo en otro script, pero /path/to/module_directoryno en la ruta de búsqueda de Python.

        Podemos agregar a la ruta de búsqueda usando sys.path.append()will /path/to/module_directoryy luego importimportar el módulo a través de la declaración:

import sys

# 添加模块所在目录到搜索路径中
sys.path.append('/path/to/module_directory')

# 现在可以导入模块
import mymodule

# 使用导入的模块中的函数或变量
mymodule.my_function()

De esta manera, el intérprete de Python buscará el módulo en la ruta absoluta especificada e importará con éxito mymoduleel módulo, de modo que se puedan usar las funciones o variables que contiene. Esto agrega temporalmente directorios específicos a la ruta de búsqueda, lo que hace que la importación de módulos sea más flexible. Pero tenga en cuenta que esta modificación es efectiva en tiempo de ejecución, cuando finaliza el script, la ruta de búsqueda se restaurará a su estado original.

2.3 Importar usando ruta absoluta

        En Python, los módulos se pueden importar usando rutas absolutas. Este enfoque funciona para archivos de módulos ubicados en cualquier directorio, sin limitarse a la ruta de búsqueda de Python.

        Supongamos que tenemos un archivo de módulo personalizado mymodule.py, ubicado /path/to/module_directoryen un directorio, y sabemos que su ruta absoluta es /path/to/module_directory/mymodule.py. Ahora queremos importar este módulo en otro script.

(1) Los módulos se pueden usar imppara importar módulos con rutas absolutas:

import imp

# 指定模块文件的绝对路径
module_path = '/path/to/module_directory/mymodule.py'

# 使用imp.load_source()函数导入模块
mymodule = imp.load_source('mymodule', module_path)

# 使用导入的模块中的函数或变量
mymodule.my_function()

A través imp.load_source()de funciones, podemos importar módulos de acuerdo con la ruta absoluta especificada. Este método no depende de la ruta de búsqueda de Python, por lo que se pueden importar archivos de módulos de ubicaciones arbitrarias.

        Cabe señalar que implos módulos se marcaron como obsoletos en Python 3.4 y versiones posteriores, y se recomienda usar importlibmódulos en su lugar.

        (2) En las versiones más recientes de Python, puede usar importlib.util.spec_from_file_location()la función yimportlib.util.module_from_spec() para implementar módulos de importación de rutas absolutas:

import importlib.util

# 指定模块文件的绝对路径
module_path = '/path/to/module_directory/mymodule.py'

# 使用importlib.util.spec_from_file_location()创建模块规范
spec = importlib.util.spec_from_file_location('mymodule', module_path)

# 使用importlib.util.module_from_spec()加载模块
mymodule = importlib.util.module_from_spec(spec)

# 将模块规范绑定到模块
spec.loader.exec_module(mymodule)

# 使用导入的模块中的函数或变量
mymodule.my_function()

El uso importlibde módulos proporciona una forma más flexible y potente de importar módulos, especialmente en Python 3.4 y superior.

2.4 Copie el módulo a cualquier directorio en la ruta de búsqueda de Python

        Copie el módulo en el directorio de la biblioteca estándar de Python, el directorio de la biblioteca de terceros o el directorio de trabajo actual para que el intérprete de Python pueda encontrar el módulo.

        Sin embargo, no se recomienda este método, ya que la modificación directa del directorio de la biblioteca estándar de Python o del directorio de la biblioteca de terceros puede causar problemas impredecibles, y la copia de módulos puede dificultar el mantenimiento del código.

2.5 Resumen

Nota: El método anterior recomienda usar el primer método o el segundo método, es decir, agregar el directorio donde se encuentra el módulo a PYTHONPATH o sys.path, lo que puede garantizar que el módulo se pueda importar correctamente en cualquier ubicación. La modificación directa de los directorios de la biblioteca estándar de Python o de los directorios de la biblioteca de terceros puede causar problemas inesperados y no se recomienda.

3 Manejo de excepciones importado por otros módulos

Cuando encuentra un error de que el módulo relacionado no se puede encontrar al importar un módulo, generalmente hay varias causas y soluciones comunes:

3.1 El módulo no está instalado

Si intenta importar un módulo de terceros, pero ese módulo no se ha instalado en su entorno de Python, dará como resultado un error de módulo no encontrado. La solución es instalar el módulo usando una herramienta de administración de paquetes como pip. Por ejemplo, instale requestsel módulo con el siguiente comando:

pip install requests

 3.2 Nombre del módulo mal escrito

        Verifique que el nombre del módulo que importó esté escrito correctamente. Python distingue entre mayúsculas y minúsculas en los nombres de los módulos.

        Diferentes versiones de Python: si está trabajando con diferentes versiones de Python, es posible que algunos módulos solo estén disponibles en ciertas versiones. Asegúrese de ejecutar el código en el entorno de Python correcto.

3.3 Faltan los archivos del módulo

        Verifique que el archivo del módulo exista y asegúrese de que esté colocado correctamente en la ruta de búsqueda del módulo. Los archivos del módulo deben .pytener una extensión.

3.4 Problemas con la ruta del módulo

        Si escribe un módulo personalizado o un módulo de terceros que no se encuentra en la ruta de búsqueda del intérprete de Python, también generará un error de que no se puede encontrar el módulo. Para soluciones, consulte 2.1, 2.2, 2.3 y 2.4 anteriores.

        Si aún encuentra el error de que no se puede encontrar el módulo, verifique cuidadosamente los motivos anteriores y tome las soluciones correspondientes de acuerdo con la situación específica.

Supongo que te gusta

Origin blog.csdn.net/qq_35831906/article/details/131913319
Recomendado
Clasificación