Como importo outros arquivos no Python?
- Como exatamente posso importar um arquivo python específico como
import file.py
? - Como posso importar uma pasta em vez de um arquivo específico?
- Quero carregar um arquivo Python dinamicamente no tempo de execução, com base na entrada do usuário.
- Quero saber como carregar apenas uma parte específica do arquivo.
Por exemplo, em main.py
eu tenho:
from extra import *
Embora isso me dê todas as definições extra.py
, quando talvez tudo o que eu quero é uma única definição:
def gap():
print
print
O que posso adicionar ao import
comunicado começar apenas gap
a partir de extra.py
?
python
python-import
Tamer
fonte
fonte
Respostas:
importlib
foi adicionado ao Python 3 para importar programaticamente um módulo. É apenas um invólucro__import__
, veja os documentos .Nota: a
.py
extensão deve ser removida demoduleName
. A função também define umpackage
argumento para importações relativas.Atualização: A resposta abaixo está desatualizada . Use a alternativa mais recente acima.
Apenas
import file
sem a extensão '.py'.Você pode marcar uma pasta como um pacote, adicionando um arquivo vazio chamado
__init__.py
.Você pode usar a
__import__
função Leva o nome do módulo como uma sequência. (Novamente: nome do módulo sem a extensão '.py'.)Digite
help(__import__)
para mais detalhes.fonte
import filename
ao init .py, poderá importar o módulo diretamente como o nome da pasta.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 muito bem para mim, com o Python 3.4.8.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:
Entre no interpretador python:
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:
Coloque isso em /home/el/foo2/main.py:
execute o arquivo:
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:
Coloque isso em /home/el/foo3/main.py:
Execute-o assim:
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:
Coloque isso em /home/el/foo4/main.py:
Executá-lo:
Isso importa tudo no arquivo externo de um diretório diferente.
Exemplo 5, use
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
Coloque esse código no seu main.py (pode estar em qualquer lugar):
Execute-o, você deve obter o seguinte:
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:
/home/el/foo5/
/home/el/foo5/herp
Crie um arquivo vazio chamado
__init__.py
herp:Crie um novo diretório / home / el / foo5 / herp / derp
Sob derp, crie outro
__init__.py
arquivo:Em / home / el / foo5 / herp / derp, crie um novo arquivo chamado
yolo.py
Coloque isso aqui:O momento da verdade, faça o novo arquivo
/home/el/foo5/main.py
, coloque isso lá;Executá-lo:
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
fonte
__import__(py_file_name)
. Incrível guia de qualquer maneiraPara importar um arquivo Python específico em 'runtime' com um nome conhecido:
...
fonte
Você não possui muitos métodos complexos para importar um arquivo python de uma pasta para outra. Basta criar um arquivo __init__.py para declarar que esta pasta é um pacote python e, em seguida, vá para o arquivo host para o qual deseja importar, apenas digite
from root.parent.folder.file import variable, class, whatever
fonte
Import doc .. - Link para referência
Os
__init__.py
arquivos são necessários para fazer o Python tratar os diretórios como contendo pacotes; isso é feito para impedir que diretórios com um nome comum, como string, ocultem involuntariamente módulos válidos que ocorrem posteriormente no caminho de pesquisa do módulo.__init__.py
pode ser apenas um arquivo vazio, mas também pode executar o código de inicialização do pacote ou definir a__all__
variávelfonte
Primeiro caso: você deseja importar arquivo
A.py
em arquivoB.py
, esses dois arquivos estão na mesma pasta, assim:Você pode fazer isso no arquivo
B.py
:ou
ou
Então você poderá usar todas as funções de arquivo
A.py
em arquivoB.py
Segundo caso: você deseja importar arquivo
folder/A.py
em arquivoB.py
, esses dois arquivos não estão na mesma pasta, assim:Você pode fazer isso no arquivo B:
ou
ou
Então você poderá usar todas as funções de arquivo
A.py
em arquivoB.py
Resumo: no primeiro caso, arquivo
A.py
é um módulo que você importa em arquivoB.py
, você usou a sintaxeimport module_name
. No segundo caso,folder
é o pacote que contém o móduloA.py
, você usou a sintaxeimport package_name.module_name
.Para mais informações sobre pacotes e módulos, consulte este link .
fonte
from folder_a.script import *
Script.py está na pasta a.import sys
esys.path.append("..")
no início do arquivo. De acordo com isso: stackoverflow.com/a/48341902/6057480 . Testado, funcionando perfeitamente, depois de fazer isso, você poderá importar um arquivo py no diretório pai e ainda poderá importar arquivos py no mesmo diretório e subdiretórios.e
Aqui estão as duas maneiras simples que entendi até agora e verifique se o arquivo "file.py" que você deseja importar como biblioteca está presente apenas no diretório atual.
fonte
Se a função definida estiver em um arquivo
x.py
:No arquivo em que você está importando a função, escreva isto:
Isso é útil se você não deseja importar todas as funções em um arquivo.
fonte
a melhor maneira de importar arquivos .py é por meio de
__init__.py
. a coisa mais simples a fazer é criar um arquivo vazio nomeado__init__.py
no mesmo diretório em que seu arquivo.py está localizado.este post de Mike Grouchy é uma ótima explicação
__init__.py
e seu uso para criar, importar e configurar pacotes python.fonte
Como eu importo é importar o arquivo e usar uma abreviação de seu nome.
Não esqueça que seu arquivo de importação DEVE SER nomeado com extensão .py
fonte
import DoStuff.py as DS
tentaria importarpy
deDoStuff
?Eu gostaria de adicionar esta nota que não faço muito claramente em outros lugares; dentro de um módulo / pacote, ao carregar de arquivos, o nome do módulo / pacote deve ser prefixado com o
mymodule
. Imaginemymodule
um layout como este:Ao carregar
somefile.py
/otherstuff.py
do__init__.py
conteúdo, deve ser semelhante a:fonte
Caso o módulo que você deseja importar não esteja em um subdiretório , tente o seguinte e execute a
app.py
partir do diretório pai comum mais profundo:Estrutura de Diretórios:
Em
app.py
, acrescente o caminho do cliente ao sys.path:Opcional (se você carregar, por exemplo, configurações) (o Inspecionar parece ser o mais robusto para meus casos de uso)
Corre
Esta solução funciona para mim tanto em cli quanto em PyCharm.
fonte
Existem algumas maneiras de incluir seu script python com o nome abc.py
Caso seu script python seja atualizado e você não queira fazer o upload - use estas instruções para atualização automática. Bônus :)
fonte
Apenas para importar arquivo python em outro arquivo python
digamos que eu tenho o arquivo helper.py python, que tem uma função de exibição como,
Agora no app.py , você pode usar a função de exibição,
A saída,
I'm working sundar gsv
NOTA: Não é necessário especificar a extensão .py.
fonte
Pode parecer uma loucura, mas você pode apenas criar um link simbólico para o arquivo que deseja importar se estiver criando um script de wrapper para ele.
fonte
Você também pode fazer isso:
from filename import something
exemplo:
from client import Client
Observe que você não precisa da.py .pyw .pyui
extensão.fonte
Foi assim que eu chamei uma função de um arquivo python, que é flexível para chamar quaisquer funções.
fonte
from mypath import Path
porPath = callfunc("/folder/to/mypath.py", "Path")
. Obrigado @ Xiao-FengLiExistem várias maneiras, conforme listado acima, mas acho que só quero importar o conteúdo de um arquivo e não quero escrever linhas e linhas e importar outros módulos. Portanto, criei uma maneira de obter o conteúdo de um arquivo, mesmo com a sintaxe do ponto (
file.property
), em vez de mesclar o arquivo importado com o seu.Primeiro de tudo, aqui está o meu arquivo que eu vou importar,
data.py
Nota: Você pode usar a
.txt
extensão.Em
mainfile.py
, comece abrindo e obtendo o conteúdo.Agora você tem o conteúdo como uma sequência, mas a tentativa de acessar
data.testString
causará um erro, comodata
é uma instância dastr
classe, e mesmo que tenha uma propriedadetestString
, não fará o que você esperava.Em seguida, crie uma classe. Por exemplo (trocadilhos),
ImportedFile
E coloque isso nele (com o recuo apropriado):
E, finalmente, redesigne da seguinte
data
maneira:E é isso! Basta acessar como faria em qualquer outro módulo, digitando
print(data.testString)
será impresso no consoleA string literal to import and test with
.Se, no entanto, você quiser o equivalente a
from mod import *
apenas largar a classe, a atribuição da instância e remover oexec
.Espero que isto ajude:)
-Benji
fonte
Um recurso muito desconhecido do Python é a capacidade de importar
zip
arquivos:O arquivo
__init__.py
do pacote contém o seguinte:Podemos escrever outro script que pode importar um pacote do arquivo zip. Só é necessário adicionar o arquivo zip ao sys.path.
fonte