Esistono molti modi per importare un file Python, tutti con i loro pro e contro.
Non limitarti a scegliere in fretta la prima strategia di importazione che funziona per te, altrimenti dovrai riscrivere la base di codice in seguito quando scoprirai che non soddisfa le tue esigenze.
Inizierò spiegando l'esempio n. 1 più semplice, quindi mi sposterò verso l'esempio n. 7 più professionale e robusto
Esempio 1, importare un modulo Python con interprete Python:
Metti questo in /home/el/foo/fox.py:
def what_does_the_fox_say():
print("vixens cry")
Entra nell'interprete 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
>>>
Hai importato fox attraverso l'interprete Python, invocato la funzione Python what_does_the_fox_say()
da fox.py.
Esempio 2, Usa execfile
o ( exec
in Python 3 ) in uno script per eseguire l'altro file python sul posto:
Inseriscilo in /home/el/foo2/mylib.py:
def moobar():
print("hi")
Inseriscilo in /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py")
moobar()
eseguire il file:
el@apollo:/home/el/foo$ python main.py
hi
La funzione moobar è stata importata da mylib.py e resa disponibile in main.py
Esempio 3, utilizzare dalla funzionalità ... import ...
Inseriscilo in /home/el/foo3/chekov.py:
def question():
print "where are the nuclear wessels?"
Inseriscilo in /home/el/foo3/main.py:
from chekov import question
question()
Eseguilo in questo modo:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Se hai definito altre funzioni in chekov.py, non sarebbero disponibili a meno che tu import *
Esempio 4, Importa riaa.py se si trova in una posizione di file diversa da quella in cui è stato importato
Inseriscilo in /home/el/foo4/stuff/riaa.py:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Inseriscilo in /home/el/foo4/main.py:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
Eseguirlo:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Ciò importa tutto nel file esterno da una directory diversa.
Esempio 5, utilizzare os.system("python yourfile.py")
import os
os.system("python yourfile.py")
Esempio 6, importa il tuo file tramite il piggyback dello startuphook python:
Aggiornare: questo esempio funzionava sia per python2 che per 3, ma ora funziona solo per python2. python3 si è sbarazzato di questo set di funzionalità startuphook dell'utente perché è stato abusato dagli autori di librerie python a bassa competenza, usandolo per iniettare impolitamente il loro codice nello spazio dei nomi globale, prima di tutti i programmi definiti dall'utente. Se vuoi che funzioni per python3, dovrai diventare più creativo. Se ti dico come farlo, gli sviluppatori di Python disabiliteranno anche quel set di funzionalità, quindi sei da solo.
Vedi: https://docs.python.org/2/library/user.html
Inserisci questo codice nella tua home directory in ~/.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 )
Inserisci questo codice nel tuo main.py (può essere ovunque):
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!")
Eseguilo, dovresti ottenere questo:
$ 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!
Se ricevi un errore qui: ModuleNotFoundError: No module named 'user'
significa che stai usando python3, startuphooks è disabilitato lì per impostazione predefinita.
Il merito di questo jist va a: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Invia lungo le tue imbarcazioni.
Esempio 7, Più robusto: importa i file in Python con il comando bare import:
- Crea una nuova directory
/home/el/foo5/
- Crea una nuova directory
/home/el/foo5/herp
Crea un file vuoto chiamato __init__.py
sotto herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Crea una nuova directory / home / el / foo5 / herp / derp
Sotto derp, crea un altro __init__.py
file:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
Sotto / home / el / foo5 / herp / derp crea un nuovo file chiamato yolo.py
Inserisci questo:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
Il momento della verità, crea il nuovo file /home/el/foo5/main.py
, inseriscilo;
from herp.derp.yolo import skycake
skycake()
Eseguirlo:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
Il __init__.py
file vuoto comunica all'interprete python che lo sviluppatore intende che questa directory sia un pacchetto improprio.
Se vuoi vedere il mio post su come includere TUTTI i file .py in una directory vedi qui: https://stackoverflow.com/a/20753073/445131