¿Cómo importo otros archivos en Python?
- ¿Cómo puedo importar exactamente un archivo Python específico
import file.py? - ¿Cómo puedo importar una carpeta en lugar de un archivo específico?
- Quiero cargar un archivo Python dinámicamente en tiempo de ejecución, basado en la entrada del usuario.
- Quiero saber cómo cargar solo una parte específica del archivo.
Por ejemplo, en main.pytengo:
from extra import *
Aunque esto me da todas las definiciones extra.py, cuando quizás todo lo que quiero es una sola definición:
def gap():
print
print
Lo agrego a la importdeclaración para obtener sólo gapa partir extra.py?
python
python-import
Domador
fuente
fuente

Respuestas:
importlibse agregó a Python 3 para importar mediante programación un módulo. Es solo una envoltura__import__, vea los documentos .Nota: la
.pyextensión debe eliminarse demoduleName. La función también define unpackageargumento para las importaciones relativas.Actualización: la respuesta a continuación está desactualizada . Use la alternativa más reciente arriba.
Solo
import filesin la extensión '.py'.Puede marcar una carpeta como un paquete, agregando un archivo vacío llamado
__init__.py.Puedes usar la
__import__función. Toma el nombre del módulo como una cadena. (Nuevamente: nombre del módulo sin la extensión '.py').Escriba
help(__import__)para más detalles.fuente
import filenamea init .py, puede importar el módulo directamente como el nombre de la carpeta.help(__import__):Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.import filenamenoextfunciona muy bien para mí, con Python 3.4.8.Hay muchas formas de importar un archivo de Python, todas con sus ventajas y desventajas.
No solo elijas apresuradamente la primera estrategia de importación que funcione para ti o de lo contrario tendrás que reescribir la base de código más adelante cuando descubras que no satisface tus necesidades.
Comenzaré explicando el ejemplo más fácil # 1, luego avanzaré hacia el ejemplo más profesional y robusto # 7
Ejemplo 1, Importe un módulo de Python con el intérprete de Python:
Ponga esto en /home/el/foo/fox.py:
Entra en el intérprete de python:
Importó Fox a través del intérprete de Python, invocó la función 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:Ponga esto en /home/el/foo2/mylib.py:
Ponga esto en /home/el/foo2/main.py:
ejecuta el archivo:
La función moobar se importó de mylib.py y se puso a disposición en main.py
Ejemplo 3, Uso de ... importar ... funcionalidad:
Ponga esto en /home/el/foo3/chekov.py:
Ponga esto en /home/el/foo3/main.py:
Ejecútelo así:
Si definió otras funciones en chekov.py, no estarán disponibles a menos que usted
import *Ejemplo 4, Importar riaa.py si está en una ubicación de archivo diferente de donde se importa
Ponga esto en /home/el/foo4/stuff/riaa.py:
Ponga esto en /home/el/foo4/main.py:
Ejecutarlo:
Eso importa todo en el archivo externo desde un directorio diferente.
Ejemplo 5, use
os.system("python yourfile.py")Ejemplo 6, importe su archivo mediante piggybacking del python startuphook:
Actualización: este ejemplo solía funcionar para python2 y 3, pero ahora solo funciona para python2. python3 se deshizo de este conjunto de características de gancho de inicio de usuario porque fue abusado por escritores de bibliotecas de python de baja habilidad, que lo usaron para inyectar su código en el espacio de nombres global, antes de todos los programas definidos por el usuario. Si quieres que esto funcione para python3, tendrás que ser más creativo. Si le digo cómo hacerlo, los desarrolladores de Python también deshabilitarán ese conjunto de características, por lo que estará solo.
Ver: https://docs.python.org/2/library/user.html
Ponga este código en su directorio de inicio en
~/.pythonrc.pyPon este código en tu main.py (puede estar en cualquier lugar):
Ejecútelo, debería obtener esto:
Si recibe un error aquí:
ModuleNotFoundError: No module named 'user'significa que está usando python3, los ganchos de inicio están deshabilitados allí de forma predeterminada.El crédito para este jist va a: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Envíe sus botes.
Ejemplo 7, más robusto: importe archivos en python con el comando de importación simple:
/home/el/foo5//home/el/foo5/herpHaga un archivo vacío nombrado
__init__.pybajo herp:Haga un nuevo directorio / home / el / foo5 / herp / derp
En derp, crea otro
__init__.pyarchivo:En / home / el / foo5 / herp / derp crea un nuevo archivo llamado
yolo.pyPonga esto allí:El momento de la verdad, crea el nuevo archivo
/home/el/foo5/main.py, pon esto allí;Ejecutarlo:
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
fuente
__import__(py_file_name). Guía increíble de todos modosPara importar un archivo Python específico en 'tiempo de ejecución' con un nombre conocido:
...
fuente
No tiene muchos métodos complejos para importar un archivo de Python de una carpeta a otra. Simplemente cree un archivo __init__.py para declarar que esta carpeta es un paquete de Python y luego vaya a su archivo host donde desea importar simplemente escriba
from root.parent.folder.file import variable, class, whateverfuente
Importar documento .. - Enlace para referencia
Los
__init__.pyarchivos son necesarios para hacer que Python trate los directorios como paquetes que contienen paquetes, esto se hace para evitar que los directorios con un nombre común, como cadena, oculten involuntariamente módulos válidos que ocurren más adelante en la ruta de búsqueda del módulo.__init__.pypuede ser un archivo vacío, pero también puede ejecutar el código de inicialización del paquete o establecer la__all__variable.fuente
Primer caso: desea importar el archivo
A.pyen el archivoB.py, estos dos archivos están en la misma carpeta, así:Puedes hacer esto en el archivo
B.py:o
o
Entonces podrá utilizar todas las funciones de archivo
A.pyen archivoB.pySegundo caso: desea importar un archivo
folder/A.pyen un archivoB.py, estos dos archivos no están en la misma carpeta, de esta manera:Puede hacer esto en el archivo B:
o
o
Entonces podrá utilizar todas las funciones de archivo
A.pyen archivoB.pyResumen: en el primer caso, el archivo
A.pyes un módulo que importa en el archivoB.py, utilizó la sintaxisimport module_name. En el segundo caso,folderes el paquete que contiene el móduloA.py, utilizó la sintaxisimport package_name.module_name.Para obtener más información sobre paquetes y módulos, consulte este enlace .
fuente
from folder_a.script import *Script.py está debajo de la carpeta a.import sysysys.path.append("..")al comienzo del archivo. De acuerdo con esto: stackoverflow.com/a/48341902/6057480 . Probado, funcionando perfectamente, después de hacer esto, podrá importar un archivo py en el directorio principal y aún podrá importar archivos py en el mismo directorio y subdirectorios.y
Estas son las dos formas simples que he entendido hasta ahora y asegúrese de que su archivo "file.py" que desea importar como biblioteca esté presente solo en su directorio actual.
fuente
Si la función definida está en un archivo
x.py:En el archivo donde está importando la función, escriba esto:
Esto es útil si no desea importar todas las funciones en un archivo.
fuente
la mejor manera de importar archivos .py es a través de
__init__.py. Lo más sencillo es crear un archivo vacío nombrado__init__.pyen el mismo directorio en el que se encuentra su archivo .py.Esta publicación de Mike Grouchy es una gran explicación
__init__.pyy su uso para hacer, importar y configurar paquetes de Python.fuente
Lo que importo es importar el archivo y usar la abreviatura de su nombre.
No olvide que su archivo de importación DEBE SER nombrado con la extensión .py
fuente
import DoStuff.py as DSintentar la importaciónpydeDoStuff?Me gustaría agregar esta nota que no veo muy claramente en otra parte dentro de un módulo / paquete, al cargar desde archivos, el nombre del módulo / paquete debe tener el prefijo
mymodule. Imaginamymoduleser un diseño como este:Al cargar
somefile.py/otherstuff.pydesde__init__.pyel contenido debe verse así:fuente
En caso de que el módulo que desea importar no esté en un subdirectorio , intente lo siguiente y ejecute
app.pydesde el directorio principal común más profundo:Estructura de directorios:
En
app.py, agregue la ruta del cliente a sys.path:Opcional (si carga, por ejemplo, configuraciones) (Inspeccionar parece ser el más robusto para mis casos de uso)
correr
Esta solución me funciona en cli, así como en PyCharm.
fuente
Hay un par de formas de incluir su script de Python con el nombre abc.py
En caso de que su script de Python se actualice y no quiera cargarlo, use estas declaraciones para la actualización automática. Bonus :)
fuente
Solo para importar un archivo de Python en otro archivo de Python
digamos que tengo un archivo python helper.py que tiene una función de visualización como,
Ahora en app.py , puede usar la función de visualización,
La salida,
I'm working sundar gsvNOTA: No es necesario especificar la extensión .py.
fuente
Esto puede parecer una locura, pero puede crear un enlace simbólico al archivo que desea importar si solo está creando un script de envoltura.
fuente
También puedes hacer esto:
from filename import somethingejemplo:
from client import Clienttenga en cuenta que no necesita la.py .pyw .pyuiextensión.fuente
Así es como hice para llamar a una función desde un archivo de Python, que es flexible para que llame a cualquier función.
fuente
from mypath import PathconPath = callfunc("/folder/to/mypath.py", "Path"). Gracias @ Xiao-FengLiHay muchas formas, como se enumeró anteriormente, pero encuentro que solo quiero importar el contenido de un archivo, y no quiero tener que escribir líneas y líneas y tener que importar otros módulos. Entonces, se me ocurrió una forma de obtener el contenido de un archivo, incluso con la sintaxis de puntos (
file.property) en lugar de fusionar el archivo importado con el suyo.En primer lugar, aquí está mi archivo que importaré,
data.pyNota: Puede usar la
.txtextensión en su lugar.En
mainfile.py, comience abriendo y obteniendo los contenidos.Ahora tiene el contenido como una cadena, pero intentar acceder
data.testStringprovocará un error, comodataes una instancia de lastrclase, e incluso si tiene una propiedadtestString, no hará lo que esperaba.Luego, crea una clase. Por ejemplo (juego de palabras),
ImportedFileY poner esto en ello (con la sangría adecuada):
Y finalmente, reasignar
dataasí:¡Y eso es! Simplemente acceda como lo haría para cualquier otro módulo, la escritura
print(data.testString)se imprimirá en la consolaA string literal to import and test with.Sin embargo, si desea el equivalente de
from mod import *simplemente abandonar la clase, la asignación de instancia y eliminar laexec.Espero que esto ayude :)
-Benji
fuente
Una característica muy desconocida de Python es la capacidad de importar
ziparchivos:El archivo
__init__.pydel paquete contiene lo siguiente:Podemos escribir otro script que pueda importar un paquete desde el archivo zip. Solo es necesario agregar el archivo zip a sys.path.
fuente