Можно ли запустить скрипт python (не модуль) из ipython, не указывая его путь? Я пытался установить PYTHONPATH, но, похоже, он работает только для модулей. Я хотел бы выполнить
%run my_script.py
не находясь в каталоге, содержащем файл.
Можно ли запустить скрипт python (не модуль) из ipython, не указывая его путь? Я пытался установить PYTHONPATH, но, похоже, он работает только для модулей. Я хотел бы выполнить
%run my_script.py
не находясь в каталоге, содержащем файл.
Ответы:
из каталога "my_script.py" вы можете просто сделать:
%run ./my_script.py
SyntaxError: invalid syntax
здесь, на консоли Python . Python 3.5.3 на Debian 9. Однако работает на IPython.
%run
это волшебная команда ipython, а не часть самого языка Python.
У %run
магии есть параметр, file_finder
который он использует для получения полного пути к исполняемому файлу (см. Здесь ); как вы заметили, он просто просматривает текущий каталог, при необходимости добавляя «.py».
Кажется, не существует способа указать, какой искатель файлов использовать с помощью %run
магии, но ничто не мешает вам определить свою собственную волшебную команду, вызываемую %run
с помощью соответствующего искателя файлов.
Как очень неприятный прием, вы можете заменить значение по умолчанию file_finder
своим:
IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder
Честно говоря, при изменении IPython API он будет работать так же, как и определение вашей собственной магии.
В Python нет разницы между модулями и скриптами; Вы можете выполнять как скрипты, так и модули. Файл должен находиться на пути pythonpath AFAIK, потому что python должен иметь возможность найти рассматриваемый файл. Если python выполняется из каталога, этот каталог автоматически добавляется в путь к python.
См. Раздел Как лучше всего вызвать сценарий Python из другого сценария Python? для получения дополнительной информации о модулях и скриптах
Также есть встроенная функция execfile (filename), которая будет делать то, что вы хотите
__name__
== ' __main__
':» в конце
для Python 3.6.5
import os
os.getcwd()
runfile('testing.py')
runfile()
команда ipython
? У меня не работает "из коробки".
import <module>
по сути такой же, какexec(<moduleSource>)
в JavaScript или Perl.