Запуск сценарію 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, наприклад
Хосе А. Мартін

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

Відповіді:


126

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

%run ./my_script.py

найкраща відповідь за простоту та стислість
Евхз

SyntaxError: invalid syntaxтут, на консолі Python . Python 3.5.3 на Debian 9. Однак працює на IPython.
гнилі

1
@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 виконується з каталогу, то каталог автоматично додається на pythonpath.

Перегляньте, який найкращий спосіб викликати сценарій Python з іншого сценарію Python? для отримання додаткової інформації про модулі та скрипти

Існує також вбудована функція execfile (назва файлу), яка буде робити те, що ви хочете


1
Це теж я думав. Однак на практиці модулі можуть бути імпортовані, але інтерпретатор не знайде сценарії, якщо не запускається з каталогу, до якого вони належать.
Тайлер Дерден,

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.