Existem várias maneiras de importar um arquivo python, todos com seus prós e contras.
Não escolha apressadamente a primeira estratégia de importação que funcione para você, caso contrário você terá que reescrever a base de código mais tarde, quando achar que ela não atende às suas necessidades.
Começarei explicando o exemplo mais fácil nº 1, depois passarei para o exemplo mais profissional e robusto nº 7
Exemplo 1, Importe um módulo python com intérprete python:
Coloque isso em /home/el/foo/fox.py:
def what_does_the_fox_say():
print("vixens cry")
Entre no interpretador 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
>>>
Você importou o fox através do interpretador python, invocou a função python what_does_the_fox_say()
de dentro do fox.py.
Exemplo 2, use execfile
ou ( exec
no Python 3 ) em um script para executar o outro arquivo python no local:
Coloque isso em /home/el/foo2/mylib.py:
def moobar():
print("hi")
Coloque isso em /home/el/foo2/main.py:
execfile("/home/el/foo2/mylib.py")
moobar()
execute o arquivo:
el@apollo:/home/el/foo$ python main.py
hi
A função moobar foi importada do mylib.py e disponibilizada no main.py
Exemplo 3, Usar de ... importar ... funcionalidade:
Coloque isso em /home/el/foo3/chekov.py:
def question():
print "where are the nuclear wessels?"
Coloque isso em /home/el/foo3/main.py:
from chekov import question
question()
Execute-o assim:
el@apollo:/home/el/foo3$ python main.py
where are the nuclear wessels?
Se você definisse outras funções no chekov.py, elas não estariam disponíveis, a menos que você import *
Exemplo 4, importe riaa.py se estiver em um local de arquivo diferente de onde foi importado
Coloque isso em /home/el/foo4/stuff/riaa.py:
def watchout():
print "computers are transforming into a noose and a yoke for humans"
Coloque isso em /home/el/foo4/main.py:
import sys
import os
sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
from riaa import *
watchout()
Executá-lo:
el@apollo:/home/el/foo4$ python main.py
computers are transforming into a noose and a yoke for humans
Isso importa tudo no arquivo externo de um diretório diferente.
Exemplo 5, use os.system("python yourfile.py")
import os
os.system("python yourfile.py")
Exemplo 6, importe seu arquivo pegando carona o python startuphook:
Atualização: este exemplo costumava funcionar para python2 e 3, mas agora só funciona para python2. O python3 se livrou desse conjunto de recursos de inicialização do usuário por ter sido abusado por escritores de bibliotecas python de baixa habilidade, usando-o para injetar impolitariamente seu código no espaço de nome global, antes de todos os programas definidos pelo usuário. Se você quiser que isso funcione para python3, precisará ser mais criativo. Se eu lhe disser como fazê-lo, os desenvolvedores de python também desabilitarão esse conjunto de recursos, então você estará por sua conta.
Consulte: https://docs.python.org/2/library/user.html
Coloque esse código no diretório inicial em ~/.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 )
Coloque esse código no seu main.py (pode estar em qualquer 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!")
Execute-o, você deve obter o seguinte:
$ 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 você receber um erro aqui: ModuleNotFoundError: No module named 'user'
significa que você está usando python3, startuphooks são desativados por padrão.
O crédito para este jist vai para: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Envie seus up-boats.
Exemplo 7, Mais robusto: importe arquivos em python com o comando bare import:
- Crie um novo diretório
/home/el/foo5/
- Crie um novo diretório
/home/el/foo5/herp
Crie um arquivo vazio chamado __init__.py
herp:
el@apollo:/home/el/foo5/herp$ touch __init__.py
el@apollo:/home/el/foo5/herp$ ls
__init__.py
Crie um novo diretório / home / el / foo5 / herp / derp
Sob derp, crie outro __init__.py
arquivo:
el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
el@apollo:/home/el/foo5/herp/derp$ ls
__init__.py
Em / home / el / foo5 / herp / derp, crie um novo arquivo chamado yolo.py
Coloque isso aqui:
def skycake():
print "SkyCake evolves to stay just beyond the cognitive reach of " +
"the bulk of men. SKYCAKE!!"
O momento da verdade, faça o novo arquivo /home/el/foo5/main.py
, coloque isso lá;
from herp.derp.yolo import skycake
skycake()
Executá-lo:
el@apollo:/home/el/foo5$ python main.py
SkyCake evolves to stay just beyond the cognitive reach of the bulk
of men. SKYCAKE!!
O __init__.py
arquivo vazio se comunica com o intérprete python que o desenvolvedor pretende que este diretório seja um pacote importável.
Se você quiser ver minha postagem sobre como incluir TODOS os arquivos .py em um diretório, consulte aqui: https://stackoverflow.com/a/20753073/445131