Можно ли запустить python script (не модуль) изнутри ipython без указания его пути? Я попытался установить PYTHONPATH, но, похоже, он работает только для модулей. Я хотел бы выполнить
%run my_script.py
не находясь в каталоге, содержащем файл.
Можно ли запустить python script (не модуль) изнутри ipython без указания его пути? Я попытался установить PYTHONPATH, но, похоже, он работает только для модулей. Я хотел бы выполнить
%run my_script.py
не находясь в каталоге, содержащем файл.
из каталога "my_script.py" вы можете просто сделать:
%run ./my_script.py
import os
filepath='C:\\Users\\User\\FolderWithPythonScript'
os.chdir(filepath)
%run pyFileInThatFilePath.py
Это должно сделать это
В python нет разницы между модулями и скриптами; Вы можете выполнять как скрипты, так и модули. Файл должен находиться в pythonpath AFAIK, потому что python должен иметь возможность найти файл, о котором идет речь. Если python выполняется из каталога, то каталог автоматически добавляется к pythonpath.
Обратитесь к Каков наилучший способ вызова Python script из другого Python script? для получения дополнительной информации о модулях и сценариях
Существует также встроенная функция execfile (имя файла), которая будет делать то, что вы хотите
Магия %run
имеет параметр file_finder
, который используется для получения полного пути к исполняемому файлу (см. здесь); как вы заметили, он просто выглядит в текущем каталоге, при необходимости добавляя ".py".
Кажется, что нет способа указать, какой файловый искатель использовать из магии %run
, но вам нечего мешать вам определить свою собственную магическую команду, которая вызывает %run
с помощью соответствующего поиска файлов.
Как очень неприятный взлом, вы можете переопределить стандартный file_finder
своим:
IPython.core.magics.execution.ExecutionMagics.run.im_func.func_defaults[2] = my_file_finder
Честно говоря, с изменением API-интерфейса IPython, который, скорее всего, будет продолжать работать как определение вашей собственной магии.
для Python 3.6.5 импорт os os.getcwd() runfile ('testing.py')