¿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.py
tengo:
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 import
declaración para obtener sólo gap
a partir extra.py
?
python
python-import
Domador
fuente
fuente
Respuestas:
importlib
se agregó a Python 3 para importar mediante programación un módulo. Es solo una envoltura__import__
, vea los documentos .Nota: la
.py
extensión debe eliminarse demoduleName
. La función también define unpackage
argumento para las importaciones relativas.Actualización: la respuesta a continuación está desactualizada . Use la alternativa más reciente arriba.
Solo
import file
sin 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 filename
a 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 filenamenoext
funciona 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
execfile
o (exec
en 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.py
Pon 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/herp
Haga un archivo vacío nombrado
__init__.py
bajo herp:Haga un nuevo directorio / home / el / foo5 / herp / derp
En derp, crea otro
__init__.py
archivo:En / home / el / foo5 / herp / derp crea un nuevo archivo llamado
yolo.py
Ponga esto allí:El momento de la verdad, crea el nuevo archivo
/home/el/foo5/main.py
, pon esto allí;Ejecutarlo:
El
__init__.py
archivo 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, whatever
fuente
Importar documento .. - Enlace para referencia
Los
__init__.py
archivos 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__.py
puede 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.py
en 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.py
en archivoB.py
Segundo caso: desea importar un archivo
folder/A.py
en 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.py
en archivoB.py
Resumen: en el primer caso, el archivo
A.py
es un módulo que importa en el archivoB.py
, utilizó la sintaxisimport module_name
. En el segundo caso,folder
es 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 sys
ysys.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__.py
en el mismo directorio en el que se encuentra su archivo .py.Esta publicación de Mike Grouchy es una gran explicación
__init__.py
y 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 DS
intentar la importaciónpy
deDoStuff
?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
. Imaginamymodule
ser un diseño como este:Al cargar
somefile.py
/otherstuff.py
desde__init__.py
el 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.py
desde 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 gsv
NOTA: 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 something
ejemplo:
from client import Client
tenga en cuenta que no necesita la.py .pyw .pyui
extensió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 Path
conPath = 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.py
Nota: Puede usar la
.txt
extensión en su lugar.En
mainfile.py
, comience abriendo y obteniendo los contenidos.Ahora tiene el contenido como una cadena, pero intentar acceder
data.testString
provocará un error, comodata
es una instancia de lastr
clase, e incluso si tiene una propiedadtestString
, no hará lo que esperaba.Luego, crea una clase. Por ejemplo (juego de palabras),
ImportedFile
Y poner esto en ello (con la sangría adecuada):
Y finalmente, reasignar
data
así:¡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
zip
archivos:El archivo
__init__.py
del 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