python - 一个函数导入多个python模块,轻松搭建熟悉的环境

标签 python import namespaces jupyter-notebook jupyter

我使用很多 Jupyter 笔记本来设计系统。我发现自己在为我启动的每个笔记本设置环境时都在做同样的事情,所以我想我会制作一个为我完成所有这些的功能。它应该将模块列表导入所需的命名空间。例如,假设这个函数存在于:my_package.setup_workspace:

def imports():
    import numpy as np

然后,我希望能够在新的 jupyter 笔记本上设置我的工作区:
import my_package
my_package.setup_workspace
np.array(["I wish this could work!"])

但是当我这样做时,python 报告它找不到 np,因此imports() 函数无法将 numpy 正确导入新的 jupyter 工作区。

最佳答案

当您在函数中进行导入时,您会在 local 中导入内容函数的命名空间,而不是模块 global一。除非你声明变量是全局的,但是它们需要已经在外部作用域中退出。这允许您在不“污染”外部作用域的情况下跨函数重用变量名。

您有几种前进的方式:

第一种自包含方式见this推特线程和 this解决方案,定义你自己的魔法。然后你就可以做 %imports在笔记本中用一堆导入替换当前单元格。优点是您可以传递选项,但它仅适用于 IPython。

其次,只需删除该函数并在 my_package.py 的顶层进行所有设置。 ,然后做 from my_package import * . import *在 Python 世界中不受欢迎,但如果它只适合你,你应该是安全的。

三、看什么%run -i在 IPython 中可以做到,它是 hackish 但应该可以工作,因为它可以在当前命名空间中执行和外部脚本。

一旦您想深入了解 Python 的工作方式,您还可以通过其他几种疯狂的方式进行调查:例如,您可以实际手动提取 setup_workspace__code__目的;修改它并重新执行它以不创建本地范围,而是 that's可能不是你想要的。虽然这是可能的,但可能无法跨 Python 版本移植。

关于python - 一个函数导入多个python模块,轻松搭建熟悉的环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46372234/

相关文章:

python - 根据字符数拆分字符串列

python - 如何创建每个点使用一种颜色的散点图(绘图)

python - 使用 Python 从 SQL 数据库到 Excel

import - xcodebuild 导入 XLIFF 本地化

python - Python命名空间的解释

python - Protocol Buffer - 将具有相同 .proto 文件的二进制数据文件合并到一个文件中

python - Tkinter 导入时出错

python - 让Python在优化模式下运行时导入.pyc

javascript - 命名空间和对象属性

python - 访问命名空间