Замена для execfile в IPython3?

Существуют различные способы повторного включения поведения, подобного execfile, для сред Python 3.x - в документации и здесь, в отношении stackru, но я не нашел точной замены для моего варианта использования.

Я использую IPython, а в Python 2.7.x execfile используется для запуска файла сценария, как если бы я набирал те же строки прямо в IPython. Это включает:

  1. полезные исключения-трассировки
  2. локальные переменные моего окружения доступны в скриптовом коде
  3. переменные, определенные локально в скрипте, доступны в среде (конечно, после вызова execfile)
  4. import X as Y операторы в сценарии также делают Y доступным в среде
  5. вызов execfile работает в интерактивных режимах, а также непосредственно в скриптах Python
  6. выполнение всего кода скрипта гарантируется для каждого вызова (кроме случаев, когда происходит исключение)
  7. execfile легко доступен везде, где есть Python - нет длинного определения или импорта неясного пакета

Общие решения, которые до сих пор не сработали:

  • from scriptfile import * не удовлетворяет #2 и #4. Для определений функций также происходит ошибка #6, поскольку повторная выдача импорта не обновляет функцию - это можно исправить с помощью reload(scriptfile) вызов.
  • exec(scriptfilehandle.read()) конструкция удовлетворяет #5-7. С некоторыми поправками также можно разобраться с № 2-4 - но это развивается до длинного определения, которое я не могу вспомнить прямо сейчас, и обратные следы все еще беспорядок.
  • IPython-х %run scriptfile это хорошо, но не соответствует требованиям № 2, № 4 и № 5.
  • Копирование кода скрипта из файла и использование IPython %paste выходит на # 5 и #7 - и это довольно громоздко для каждого звонка.

У вас есть какие-либо решения, о которых я еще не слышал?

Я использую IPython+execfile, играя с данными, создавая (много) фигур matplotlib, пробуя что-то... И если мне нравятся написанные мной строки, я помещаю фрагмент кода в скрипт. Некоторые примеры того, что я делаю:

  • написание сценария, который подготавливает среду для определенного набора данных: выполнение импорта, загрузка некоторых данных, определение некоторых полезных функций для работы с этим набором данных,...
  • полуавтоматическое построение графиков: сложный сценарий для прекрасного построения десяти фигур данных, содержащихся в локальной переменной, затем пересмотр сценария plot и повторное его выполнение, затем фильтрация данных, повторное выполнение сценария plot...
  • написание сценария, который использует несколько моих небольших фрагментов, которые будут выполняться в одночасье на большом наборе данных
  • кроме исследования и построения графиков, иногда мне нужно писать небольшие сценарии в различных системах: RasPi, маршрутизатор с OpenWRT, машина без доступа к Интернету, машина с Windows (без прав администратора) - все это может иметь свои ограничения на то, что библиотеки доступны

С другой стороны, я должен признать, что я не профессиональный программист - мое понимание внутренней работы Python с локальными / глобальными переменными, и что на самом деле происходит в import заявление, очень ограничены.

Буду очень признателен за любую помощь, будь то решение моих проблем или полезное объяснение!

0 ответов

Другие вопросы по тегам