Eu tenho um diretório que armazena todos os arquivos .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Eu quero usar as classes de user.py e dir.py em main.py .
Como posso importar essas classes Python para main.py ?
Além disso, como posso importar a classe User
se user.py estiver em um subdiretório?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
fonte
fonte
Respostas:
Python 2
Crie um arquivo vazio chamado
__init__.py
no mesmo diretório que os arquivos. Isso significa para o Python que está "ok para importar deste diretório".Então apenas faça ...
O mesmo vale se os arquivos estiverem em um subdiretório - coloque um
__init__.py
no subdiretório também e use instruções de importação regulares, com notação de ponto. Para cada nível de diretório, você precisa adicionar ao caminho de importação.Portanto, se o diretório tiver o nome "classes", faça o seguinte:
Python 3
O mesmo que o anterior, mas prefixe o nome do módulo com a
.
se não estiver usando um subdiretório:fonte
__init__.py
estiver vazio, o que estiver dentro será o que estará disponível quando você importar o pacote (e as coisas que não foram importadas não estarão disponíveis).__init__.py
__init__.py
__init__.py
arquivo é necessário? Se eu colocar todos os três arquivos no mesmo diretório e executarmain.py
, ele poderá executarimport
os outros dois módulos sem ele. o que estou perdendo?__init__.py
e poder importar outros módulos no mesmo diretório. Especificamente,import
s de outros módulos no mesmo diretório que o__init__.py
próprio arquivo que funcionava no Python 2.7.8, falhou no Python 3.4.1. Para corrigi-lo, tive que prefixar cada um deles com o nome do subdiretório e um ponto (ou seja,import module
tive que mudar paraimport subdirectory.module
). Felizmente, ele ainda funcionou no Python 2.7.8 depois de fazer isso.Acabei de aprender (graças ao comentário de martineau ) que, para importar classes de arquivos dentro do mesmo diretório, você agora escreveria em Python 3:
fonte
ValueError: Attempted relative import in non-package
, mas erro desaparece quando eu mudar parafrom user import User
No seu
main.py
:onde
Class
é o nome da classe que você deseja importar.Se você deseja chamar um método de
Class
, pode chamá-lo usando:Class.method
Observe que deve haver um
__init__.py
arquivo vazio no mesmo diretório.fonte
__init__.py
.Você pode importar o módulo e ter acesso pelo nome, se não quiser misturar funções e classes com as suas.
ou você pode importar as funções e classes para o seu código
você pode usar wildchar * para importar tudo nesse módulo para o seu código
fonte
No python3, não
__init__.py
é mais necessário . Se o diretório atual do console for o diretório em que o script python está localizado, tudo funcionará bem comNo entanto, isso não funcionará se chamado de um diretório diferente, que não contém
user.py
.Nesse caso, use
Isso funciona mesmo se você quiser importar o arquivo inteiro em vez de apenas uma classe a partir daí.
fonte
import user
sublinhada em vermelho); alterado para a importação relativa (from . import user
) e o linter não o sinalizou mais.Para facilitar a compreensão:
Etapa 1: vamos para um diretório, onde tudo será incluído
Etapa 2: agora vamos criar um arquivo class1.py com um nome de classe Class1 com algum código
Etapa 3: agora vamos criar um arquivo class2.py com um nome de classe Class2 com algum código
Etapa 4: agora vamos criar um main.py que será executado uma vez para usar Class1 e Class2 a partir de 2 arquivos diferentes
Etapa 5: executar o programa
A saída seria
fonte
Python 3
O mesmo
directory
.importar arquivo:
log.py
classe de importação:
SampleApp()
.ou
diretório é
basic
.importar no arquivo:
log.py
.classe de importação:
SampleApp()
.fonte
fonte
Se user.py e dir.py não estiverem incluindo classes,
não está funcionando. Você deve importar como
fonte
Não sei por que esse trabalho, mas usando o Pycharm build
from file_in_same_dir import class_name
O IDE reclamou, mas parece que ainda funcionou. Estou usando Python 3.7
fonte
Brevemente, Criar um arquivo
__init__.py
é diretório de classes e importá-lo para o seu script, como a seguir (Importar todos os casos)Importar apenas classes selecionadas
fonte
importar do mesmo diretório
Para importar do subdiretório, o diretório deve conter
arquivo diferente de você arquivos então
do diretório import your_file
fonte
Python3
usar
e
igual a
fonte