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:
def what_does_the_fox_say():
print("vixens cry")
Entra en el 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
>>>
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:
def moobar():
print("hi")
Ponga esto en /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py")
moobar()
ejecuta el archivo:
el@apollo:/home/el/foo$ python main.py
hi
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:
def question():
print "where are the nuclear wessels?"
Ponga esto en /home/el/foo3/main.py:
from chekov import question
question()
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 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:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Ponga 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()
Ejecutarlo:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Eso importa todo en el archivo externo desde un directorio diferente.
Ejemplo 5, use os.system("python yourfile.py")
import os
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
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 )
Pon este código en tu 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'
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:
- Hacer un nuevo directorio
/home/el/foo5/
- Hacer un nuevo directorio
/home/el/foo5/herp
Haga un archivo vacío nombrado __init__.py
bajo herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Haga un nuevo directorio / home / el / foo5 / herp / derp
En derp, crea otro __init__.py
archivo:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
En / home / el / foo5 / herp / derp crea un nuevo archivo llamado yolo.py
Ponga esto allí:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
El momento de la verdad, crea el nuevo archivo /home/el/foo5/main.py
, pon esto allí;
from herp.derp.yolo import skycake
skycake()
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__.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