Estou desenvolvendo um programa Python que pode ser executado de duas maneiras: a primeira é chamar "python main.py", que solicita a entrada do usuário de maneira amigável e, em seguida, executa a entrada do usuário por meio do programa. A outra maneira é chamar "python batch.py -file- ", que repassará toda a coleta amigável de entradas e executará o valor de entrada de um arquivo inteiro através do programa de uma só vez.
O problema é que, quando executo "batch.py", ele importa algumas variáveis / métodos / etc de "main.py" e quando executa esse código:
import main
na primeira linha do programa, ele imediatamente erros porque tenta executar o código em "main.py".
Como posso impedir que o Python execute o código contido no módulo "principal" que estou importando?
fonte
Devido à maneira como o Python funciona, é necessário executar seus módulos quando os importar.
Para impedir que o código no módulo seja executado quando importado, mas apenas quando executado diretamente, você pode protegê-lo com isso
if
:Você pode colocar esse código em um
main()
método, para poder executar o arquivo diretamente ou importar o módulo e chamar omain()
. Por exemplo, suponha que isso esteja no arquivofoo.py
.Este programa pode ser executado indo
python foo.py
ou a partir de outro script Python:fonte
Use o
if __name__ == '__main__'
idioma -__name__
é uma variável especial cujo valor é'__main__'
se o módulo estiver sendo executado como um script e o nome do módulo se for importado. Então você faria algo comofonte
Infelizmente você não. Isso faz parte de como a sintaxe de importação funciona e é importante que isso aconteça - lembre-
def
se de que na verdade é algo executado, se o Python não executasse a importação, você ficaria preso às funções.Porém, como você provavelmente tem acesso ao arquivo, poderá procurar e ver o que causa o erro. Pode ser possível modificar seu ambiente para impedir que o erro aconteça.
fonte
Coloque o código dentro de uma função e ele não será executado até que você chame a função. Você deve ter uma função principal no seu
main.py
. com a declaração:Então, se você chamar,
python main.py
amain()
função será executada. Se você importarmain.py
, não será. Além disso, você provavelmente deve renomearmain.py
para outra coisa por uma questão de clareza.fonte
Havia uma proposta de aprimoramento do Python PEP 299 que visava substituir o
if __name__ == '__main__':
idioma pordef __main__:
, mas foi rejeitada. Ainda é uma boa leitura saber o que ter em mente ao usarif __name__ = '__main__':
.fonte
Você pode escrever seu "main.py" assim:
fonte
Embora você não possa usar
import
sem executar o código; existe uma maneira rápida de inserir suas variáveis; usandonumpy.savez
, que armazena variáveis como matrizes numpy em um arquivo .npz. Depois, você pode carregar as variáveis usandonumpy.load
.Veja uma descrição completa na documentação do scipy
Observe que este é apenas o caso de variáveis e matrizes de variáveis, e não de métodos etc.
fonte
Tente apenas importar as funções necessárias do main.py? Assim,
Pode ser que você tenha nomeado uma função em batch.py da mesma forma que uma em main.py, e quando você importa main.py, o programa executa a função main.py em vez da função batch.py; fazendo o acima deve corrigir isso. Eu espero.
fonte
import main
NÃO importa tudo do main para o namespace atual. Ele adiciona apenas um únicomain
símbolo no espaço para nome atual, para que colisões não possam acontecer.