¿Cómo importo otros archivos de Python?

Resuelto Tamer asked hace 14 años • 23 respuestas

¿Cómo importo archivos en Python? Quiero importar:

  1. un archivo (por ejemplo file.py)
  2. una carpeta
  3. un archivo dinámicamente en tiempo de ejecución, según la entrada del usuario
  4. una parte específica de un archivo (por ejemplo, una sola función)
Tamer avatar Feb 28 '10 10:02 Tamer
Aceptado

Hay muchas formas de importar un archivo Python, todas con sus ventajas y desventajas.

No elija apresuradamente la primera estrategia de importación que funcione para usted o tendrá que reescribir el código base más adelante cuando descubra que no satisface sus necesidades.

Comenzaré explicando el ejemplo n.° 1 más sencillo y luego pasaré al ejemplo n.° 7 más profesional y sólido.

Ejemplo 1, importar un módulo de Python con un intérprete de Python:

  1. Pon esto en /home/el/foo/fox.py:

    def what_does_the_fox_say():
      print("vixens cry")
    
  2. Ingrese al intérprete de Python:

    el@apollo:/home/el/foo$ python
    Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
    >>> import fox
    >>> fox.what_does_the_fox_say()
    vixens cry
    >>> 
    

    Importaste fox a través del intérprete de Python, invocaste la función de Python what_does_the_fox_say()desde fox.py.

Ejemplo 2, use execfileo ( execen Python 3 ) en un script para ejecutar el otro archivo de Python en su lugar:

  1. Pon esto en /home/el/foo2/mylib.py:

    def moobar():
      print("hi")
    
  2. Pon esto en /home/el/foo2/main.py:

    execfile("/home/el/foo2/mylib.py")
    moobar()
    
  3. ejecuta el archivo:

    el@apollo:/home/el/foo$ python main.py
    hi
    

    La función moobar se importó de mylib.py y estuvo disponible en main.py

Ejemplo 3, Utilizar desde... importar... funcionalidad:

  1. Pon esto en /home/el/foo3/chekov.py:

    def question():
      print "where are the nuclear wessels?"
    
  2. Pon esto en /home/el/foo3/main.py:

    from chekov import question
    question()
    
  3. Ejecútelo así:

    el@apollo:/home/el/foo3$ python main.py 
    where are the nuclear wessels?
    

    Si definió otras funciones en chekov.py, no estarán disponibles a menos queimport *

Ejemplo 4: Importar riaa.py si está en una ubicación de archivo diferente a la de donde se importó

  1. Pon esto en /home/el/foo4/stuff/riaa.py:

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
    
  2. Pon esto en /home/el/foo4/main.py:

    import sys 
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
    
  3. Ejecutarlo:

    el@apollo:/home/el/foo4$ python main.py 
    computers are transforming into a noose and a yoke for humans
    

    Eso importa todo el contenido del archivo externo desde un directorio diferente.

Ejemplo 5, usoos.system("python yourfile.py")

import os
os.system("python yourfile.py")

Ejemplo 6, importe su archivo utilizando el gancho de inicio de Python:

Actualización: este ejemplo solía funcionar tanto para python2 como para 3, pero ahora solo funciona para python2. python3 se deshizo de este conjunto de funciones de inicio de usuario porque los escritores de bibliotecas de Python poco capacitados abusaron de él, usándolo para inyectar descortésmente su código en el espacio de nombres global, antes que todos los programas definidos por el usuario. Si quieres que esto funcione para python3, tendrás que ser más creativo. Si te digo cómo hacerlo, los desarrolladores de Python también desactivarán ese conjunto de funciones, por lo que estarás solo.

Ver: https://docs.python.org/2/library/user.html

Coloque este código en su directorio personal en~/.pythonrc.py

class secretclass:
    def secretmessage(cls, myarg):
        return myarg + " is if.. up in the sky, the sky"
    secretmessage = classmethod( secretmessage )

    def skycake(cls):
        return "cookie and sky pie people can't go up and "
    skycake = classmethod( skycake )

Coloque este código en su main.py (puede estar en cualquier lugar):

import user
msg = "The only way skycake tates good" 
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")

Ejecútelo, debería obtener esto:

$ python main.py
The only way skycake tates good is if.. up in the sky, 
the skycookie and sky pie people can't go up and  have the sky pie! 
SKYCAKE!

Si recibe un error aquí: ModuleNotFoundError: No module named 'user'entonces significa que está usando python3, los ganchos de inicio están deshabilitados allí de forma predeterminada.

El crédito por este jist es para: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Envíe sus barcos.

Ejemplo 7, más sólido: importe archivos en Python con el comando de importación simple:

  1. Crear un nuevo directorio/home/el/foo5/
  2. Crear un nuevo directorio/home/el/foo5/herp
  3. Cree un archivo vacío llamado __init__.pyherp:

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
    
  4. Crea un nuevo directorio /home/el/foo5/herp/derp

  5. En derp, crea otro __init__.pyarchivo:

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
    
  6. En /home/el/foo5/herp/derp crea un nuevo archivo llamado yolo.pyPon esto ahí:

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
    
  7. El momento de la verdad, crea el nuevo archivo /home/el/foo5/main.py, pon esto allí;

    from herp.derp.yolo import skycake
    skycake()
    
  8. Ejecutarlo:

    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk 
    of men. SKYCAKE!!
    

    El __init__.pyarchivo vacío comunica al intérprete de Python que el desarrollador pretende que este directorio sea un paquete importable.

Si desea ver mi publicación sobre cómo incluir TODOS los archivos .py en un directorio, consulte aquí: https://stackoverflow.com/a/20753073/445131

Eric Leschinski avatar Dec 23 '2013 18:12 Eric Leschinski

importlibse agregó a Python 3 para importar un módulo mediante programación.

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

La extensión .py debe eliminarse de moduleName. La función también define un packageargumento para importaciones relativas.

En Python 2.x:

  • Solo import filesin la extensión .py
  • Una carpeta se puede marcar como paquete agregando un __init__.pyarchivo vacío
  • Puede utilizar la __import__función, que toma el nombre del módulo (sin extensión) como una extensión de cadena
pmName = input('Enter module name:')
pm = __import__(pmName)
print(dir(pm))

Escriba help(__import__)para más detalles.

tabdulradi avatar Feb 28 '2010 03:02 tabdulradi

Primer caso

: desea importar un archivoA.pydentro de otroB.py, estos dos archivos están en la misma carpeta, así:

. 
├── A.py 
└── B.py

Puedes hacer esto en el archivo B.py:

import A

o

from A import *

o

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

Entonces podrás utilizar todas las funciones de archivo A.pyen archivoB.py


Segundo caso

Si desea importar un archivofolder/A.pydentro de otroB.py, estos dos archivos no están en la misma carpeta, así:

.
├── B.py
└── folder
     └── A.py

Puedes hacer esto en el archivo B.py:

import folder.A

o

from folder.A import *

o

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

Entonces podrás utilizar todas las funciones de archivo A.pyen archivoB.py


Resumen

  • En el primer caso , archivo A.pyes un módulo que importas en archivo B.py, usaste la sintaxis import module_name.
  • In the second case, folder is the package that contains the module A.py, you used the syntax import package_name.module_name.

For more info on packages and modules, consult this link.

Bohao LI avatar May 15 '2019 13:05 Bohao LI