gpt4 book ai didi

python - 加载模块后运行 Python 启动代码

转载 作者:太空狗 更新时间:2023-10-30 00:13:09 26 4
gpt4 key购买 nike

我正在使用带有 SparkContext 的 Jupyter 笔记本和 Python 内核。一位同事编写了一些 Python 代码,将 Spark 事件与 ipykernel 事件连接起来。当我们从笔记本单元导入他的模块时,它适用于我们需要支持的所有组合:Python 2.7 和 3.5、Spark 1.6 和 2.x、仅限 Linux。

现在我们要为所有 Python 内核自动启用该代码。我将导入放入我们的 sitecustomize.py。这适用于 Spark 2.x,但不适用于 Spark 1.6。带有 Spark 1.6 的内核不再获得 sc,有些东西搞砸了,以至于 matplotlib.cbook 等不相关的导入失败。当我使用计时器将导入延迟几秒钟时,它会起作用。显然,sitecustomize.py 中的代码执行得太早,无法导入连接 Spark 和 ipykernel 的模块。

我正在寻找一种方法来延迟导入,直到 Spark 和/或 ipykernel 完全初始化。但在执行任何笔记本单元之前,它仍应作为内核启动的一部分执行。我找到了 this trick延迟代码执行,直到 sys.argv 被初始化。但我不认为它可以像 sc 这样的全局变量工作,考虑到 Python 全局变量仍然是模块的本地变量。到目前为止,我能想到的最好办法是使用计时器每秒检查 sys.modules 中是否存在某些模块。但这不是很可靠,因为我不知道如何区分完全初始化的模块和仍在加载过程中的模块。

关于如何 Hook 在启动期间执行较晚的启动代码的任何想法?特定于 pyspark 和/或 ipykernel 的解决方案将满足我的需求。

最佳答案

嗯,关于遇到的错误,您并没有提供很多细节。

我认为为 ipython 内核自定义启动行为的规范方法是设置配置文件并设置 exec_lines 选项。

例如,您可以输入 ~/.ipython/profile_default/ipython_config.py

# sample ipython_config.py
c = get_config()

c.InteractiveShellApp.exec_lines = [
'import numpy',
'import scipy'
]
c.InteractiveShellApp.exec_files = [
'mycode.py',
'fancy.ipy'
]

关于python - 加载模块后运行 Python 启动代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com