Tengo un directorio que almacena todos los archivos .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Quiero usar clases de user.py y dir.py en main.py .
¿Cómo puedo importar estas clases de Python en main.py ?
Además, ¿cómo puedo importar la clase User
si user.py está en un subdirectorio?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
fuente
fuente
Respuestas:
Python 2
Cree un archivo vacío llamado
__init__.py
en el mismo directorio que los archivos. Eso significará para Python que está "bien importar desde este directorio".Entonces solo haz ...
Lo mismo es cierto si los archivos están en un subdirectorio: coloque también
__init__.py
en el subdirectorio y luego use declaraciones de importación regulares, con notación de puntos. Para cada nivel de directorio, debe agregar a la ruta de importación.Entonces, si el directorio se llamaba "clases", entonces haría esto:
Python 3
Igual que el anterior, pero prefija el nombre del módulo con un
.
si no está usando un subdirectorio:fuente
__init__.py
está vacío, lo que esté dentro es lo que estará disponible cuando importe el paquete (y las cosas no importadas no estarán disponibles en absoluto).__init__.py
__init__.py
__init__.py
necesita un archivo? Si pongo los tres archivos en el mismo directorio y lo ejecutomain.py
, puede hacerloimport
desde los otros dos módulos sin él. ¿Qué me estoy perdiendo?__init__.py
posibilidad de importar otros módulos en el mismo directorio. Específicamente,import
s de otros módulos en el mismo directorio que el__init__.py
archivo mismo que funcionaba en Python 2.7.8, fallaron en Python 3.4.1. Para solucionarlo tuve que prefijar cada uno de ellos con el nombre del subdirectorio y un punto (es decir,import module
tuve que cambiarlo aimport subdirectory.module
). Afortunadamente, todavía funcionó en Python 2.7.8 después de hacer esto.Acabo de enterarme (gracias al comentario de martineau ) de que, para importar clases de archivos dentro del mismo directorio, ahora escribirías en Python 3:
fuente
ValueError: Attempted relative import in non-package
from user import User
En su
main.py
:donde
Class
está el nombre de la clase que quieres importar.Si desea llamar a un método de
Class
, puede llamarlo usando:Class.method
Tenga en cuenta que debe haber un
__init__.py
archivo vacío en el mismo directorio.fuente
__init__.py
.Puede importar el módulo y tener acceso a través de su nombre si no desea mezclar funciones y clases con las suyas.
o puede importar las funciones y clases a su código
puedes usar wildchar * para importar todo en ese módulo a tu código
fuente
En python3,
__init__.py
es ya no es necesario . Si el directorio actual de la consola es el directorio donde se encuentra el script de Python, todo funciona bien conSin embargo, esto no funcionará si se llama desde un directorio diferente, que no contiene
user.py
.En ese caso, use
Esto funciona incluso si desea importar todo el archivo en lugar de solo una clase desde allí.
fuente
import user
estaba subrayado en rojo); cambió a la importación relativa (from . import user
) y la interfaz ya no la marcó.Para hacerlo más simple de entender:
Paso 1: vamos a un directorio, donde se incluirán todos
Paso 2: ahora hagamos un archivo class1.py que tenga un nombre de clase Class1 con algún código
Paso 3: ahora hagamos un archivo class2.py que tenga un nombre de clase Class2 con algún código
Paso 4: ahora hagamos un main.py que se ejecutará una vez para usar Class1 y Class2 de 2 archivos diferentes
Paso 5: ejecuta el programa
La salida sería
fuente
Python 3
Mismo
directory
.importar archivo:
log.py
clase de importación:
SampleApp()
.o
directorio es
basic
.importar en archivo:
log.py
.clase de importación:
SampleApp()
.fuente
fuente
Si user.py y dir.py no incluyen clases, entonces
no está trabajando. Luego debe importar como
fuente
No estoy seguro de por qué esto funciona, pero usando Pycharm build
from file_in_same_dir import class_name
El IDE se quejó al respecto, pero parece que todavía funcionó. Estoy usando Python 3.7
fuente
Demasiado breve, Crear un archivo
__init__.py
es el directorio de clases y luego importarlo a su script como sigue (Importar todos los casos)Importar solo clases seleccionadas
fuente
importar desde el mismo directorio
para importar desde el subdirectorio, el directorio debe contener
archivo que no sean sus archivos entonces
desde el directorio import your_file
fuente
Python3
utilizar
y
al igual que
fuente