Executando script python dentro do ipython


122

É possível executar um script python (não módulo) de dentro do ipython sem indicar seu caminho? Tentei definir o PYTHONPATH, mas parece funcionar apenas para módulos. Eu gostaria de executar

%run my_script.py

sem estar no diretório que contém o arquivo.


import <module>é essencialmente o mesmo que exec(<moduleSource>)em JavaScript ou Perl.
Vortico

14
+1 para o abc.py sintaxe% run - estava tentando olhar para isso
Sid Kshatriya

1
você pode usar o caminho:% run ../scripts/my_scripts por exemplo
Jose A. Martín

para scripts CLI desenvolvidos com a biblioteca Click, isso não funciona para mim, recebo: IOErrorTraceback (última chamada mais recente) /home/miguelfg/workspace/projects*********/db_preparation.py no módulo < > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Respostas:


126

de dentro do diretório "my_script.py" você pode simplesmente fazer:

%run ./my_script.py

melhor resposta para simplicidade e concisão
Evhz 14/02

SyntaxError: invalid syntaxaqui, no console Python . Python 3.5.3 no Debian 9. No entanto, funciona no IPython.
rotton 20/02

1
@rotton é porque %runé um comando mágico do ipython, não faz parte da própria linguagem Python.
HugoMailhot 20/07

28

Como executar um script em Ipython

import os
filepath='C:\\Users\\User\\FolderWithPythonScript' 
os.chdir(filepath)
%run pyFileInThatFilePath.py

Isso deve resolver


16

A %runmágica possui um parâmetro file_finderusado para obter o caminho completo para a execução do arquivo (veja aqui ); como você observa, ele apenas aparece no diretório atual, acrescentando ".py", se necessário.

Não parece ser uma maneira de especificar qual arquivo localizador para uso a partir da %runmagia, mas não há nada para impedi-lo de definir o seu próprio comando mágico que chamadas para %runcom um localizador de arquivo apropriado.

Como um hack muito desagradável, você pode substituir o padrão file_finderpelo seu:

IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder

Para ser sincero, na taxa em que a API do IPython está mudando, é provável que continue a funcionar como define sua própria mágica.


16

Em python, não há diferença entre módulos e scripts; Você pode executar scripts e módulos. O arquivo deve estar no pythonpath AFAIK porque o python deve poder encontrar o arquivo em questão. Se o python for executado a partir de um diretório, o diretório será automaticamente adicionado ao pythonpath.

Consulte Qual é a melhor maneira de chamar um script Python de outro script Python? para obter mais informações sobre módulos x scripts

Há também uma função interna execfile (nome do arquivo) que fará o que você deseja


1
Foi também o que pensei. No entanto, na prática, os módulos podem ser importados, mas os scripts não são encontrados pelo intérprete, a menos que sejam iniciados no diretório ao qual pertencem.
Tyler Durden

1
Leia docs.python.org/tutorial/modules.html#the-module-search-path para obter mais informações. Ele detalha onde deve ser colocado o python para encontrar o arquivo. Mais especificamente, muitos módulos podem funcionar como scripts usando a linha "if __name__== ' __main__':" no final
Snakes and Coffee

0

para Python 3.6.5

import os
os.getcwd()
runfile('testing.py')

1
É runfile()um comando de ipython? Não funciona pronto para mim.
user3342981
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.