Замена для execfile в IPython3?
Существуют различные способы повторного включения поведения, подобного execfile, для сред Python 3.x - в документации и здесь, в отношении stackru, но я не нашел точной замены для моего варианта использования.
Я использую IPython, а в Python 2.7.x execfile используется для запуска файла сценария, как если бы я набирал те же строки прямо в IPython. Это включает:
- полезные исключения-трассировки
- локальные переменные моего окружения доступны в скриптовом коде
- переменные, определенные локально в скрипте, доступны в среде (конечно, после вызова execfile)
import X as Y
операторы в сценарии также делают Y доступным в среде- вызов execfile работает в интерактивных режимах, а также непосредственно в скриптах Python
- выполнение всего кода скрипта гарантируется для каждого вызова (кроме случаев, когда происходит исключение)
- 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
заявление, очень ограничены.
Буду очень признателен за любую помощь, будь то решение моих проблем или полезное объяснение!