0

有多种方法可以为 Python 3.x 环境重新启用类似 execfile 的行为 - 在文档和 stackoverflow 上,但我没有找到完全替代我的用例的方法。

我正在使用 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 - 每次调用都非常麻烦。

你有什么我还没有听说过的解决方案吗?

我在处理数据、生成(大量)matplotlib 图形、尝试东西时使用 IPython+execfile,如果我喜欢我写的一些行,我会将代码片段放入脚本中。我正在做的一些例子:

  • 编写一个为特定数据集准备环境的脚本:进行导入,加载一些数据,定义一些有用的函数来处理这个数据集,......
  • 半自动绘图:精美的脚本,用于精美地绘制保存在局部变量中的十个数据,然后修改绘图脚本并重新执行它,然后过滤数据,重新执行绘图脚本,...
  • 编写一个脚本,利用我的几个小片段,在大型数据集上运行一夜
  • 除了数据探索和绘图之外,有时我需要在各种系统上编写小脚本:RasPi、带有 OpenWRT 的路由器、无法访问 Internet 的机器、Windows 机器(没有管理员权限)——所有这些都可能有它们的限制图书馆可用

另一方面,我不得不承认,我不是专业的程序员——我对 Python 与局部/全局变量的内部工作原理以及语句中真正发生的事情的洞察力import非常有限。

任何帮助 - 可能是我的问题的解决方案或有用的解释 - 将不胜感激!

4

0 回答 0