Запуск скрипта python внутри ipython


122

Можно ли запустить скрипт python (не модуль) из ipython, не указывая его путь? Я пытался установить PYTHONPATH, но, похоже, он работает только для модулей. Я хотел бы выполнить

%run my_script.py

не находясь в каталоге, содержащем файл.


import <module>по сути такой же, как exec(<moduleSource>)в JavaScript или Perl.
Vortico

14
+1 для синтаксиса% run abc.py - пытался это найти
Сид Кшатрия

1
вы можете использовать путь:% run ../scripts/my_scripts, например
Jose A. Martín

для скриптов CLI, разработанных с помощью библиотеки Click, у меня это не работает, я получаю: IOErrorTraceback (последний вызов последним) /home/miguelfg/workspace/projects*********/db_preparation.py в <module > () 1270 1271 if name == " main ": -> 1272 main () 1273 1274 ...
miguelfg

Ответы:


126

из каталога "my_script.py" вы можете просто сделать:

%run ./my_script.py

лучший ответ за простоту и лаконичность
Evhz

SyntaxError: invalid syntaxздесь, на консоли Python . Python 3.5.3 на Debian 9. Однако работает на IPython.
Rotton

2
@rotton, потому что %runэто волшебная команда ipython, а не часть самого языка Python.
HugoMailhot

28

Как запустить скрипт в Ipython

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

Это должно сработать


16

У %runмагии есть параметр, file_finderкоторый он использует для получения полного пути к исполняемому файлу (см. Здесь ); как вы заметили, он просто просматривает текущий каталог, при необходимости добавляя «.py».

Кажется, не существует способа указать, какой искатель файлов использовать с помощью %runмагии, но ничто не мешает вам определить свою собственную волшебную команду, вызываемую %runс помощью соответствующего искателя файлов.

Как очень неприятный прием, вы можете заменить значение по умолчанию file_finderсвоим:

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

Честно говоря, при изменении IPython API он будет работать так же, как и определение вашей собственной магии.


16

В Python нет разницы между модулями и скриптами; Вы можете выполнять как скрипты, так и модули. Файл должен находиться на пути pythonpath AFAIK, потому что python должен иметь возможность найти рассматриваемый файл. Если python выполняется из каталога, этот каталог автоматически добавляется в путь к python.

См. Раздел Как лучше всего вызвать сценарий Python из другого сценария Python? для получения дополнительной информации о модулях и скриптах

Также есть встроенная функция execfile (filename), которая будет делать то, что вы хотите


1
Я тоже так думал. Однако на практике модули могут быть импортированы, но скрипты не будут найдены интерпретатором, если они не будут запущены из каталога, к которому они принадлежат.
Tyler Durden

1
Прочтите docs.python.org/tutorial/modules.html#the-module-search-path для получения дополнительной информации. В нем подробно описано, где он должен быть помещен для python, чтобы найти файл. В частности, многие модули могут дублироваться как сценарии, используя строку «if __name__== ' __main__':» в конце
Snakes and Coffee

0

для Python 3.6.5

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

1
Есть runfile()команда ipython? У меня не работает "из коробки".
user3342981 09
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.