【问题标题】:Conditional import python in notebook笔记本中的条件导入python
【发布时间】:2016-07-07 09:25:58
【问题描述】:

我正在尝试根据我是否在笔记本中修改模块的导入名称。 我尝试了类似的东西

api.py

is_notebook = False
if is_notebook:
    from tqdm import tnrange as trange
    from tqdm import tqdm_notebook as tqdm
else:
    from tqdm import trange
    from tqdm import tqdm

在笔记本的单元格中我会这样做:

import api
api.is_notebook = True

但它似乎不起作用。 我怎样才能做到这一点?

【问题讨论】:

  • 你得到什么错误?
  • 我没有任何错误但没有修改导入。
  • 1.你试过“try-except block”吗? 2. 你调试过导入的代码吗?通过在 try 和 except 块中添加打印语句来尝试一下?
  • 我没有看到你的意思,因为我没有导入错误

标签: python import module jupyter-notebook


【解决方案1】:

我认为我们可以通过使用这样的中间文件 abc.py 来实现同样的目的:

abc.py 的内容

is_notebook = False
if is_notebook:
   from tqdm import tnrange as trange
   from tqdm import tqdm_notebook as tqdm
else:
   from tqdm import trange
   from tqdm import tqdm

然后在产品代码中尝试这样:

from abc import trange
from abc import tqdm

您将获得 trange 和 tq​​dm 的正确代码。

【讨论】:

    【解决方案2】:

    api.py

    def imports(is_notebook):
        if is_notebook:
            from tqdm import tnrange as trange
            from tqdm import tqdm_notebook as tqdm
        else:
            from tqdm import trange
            from tqdm import tqdm
    

    导入 api.py 后调用此函数:

    api.imports(True)
    

    【讨论】:

      【解决方案3】:

      这是一个依赖于 python 模块导入工作方式的 hacky 解决方案,它可能很容易崩溃。我很抱歉。

      在您的代码中,您仅在导入模块 api 后才将 notebook 设置为 True,因此它将无效。但是,在加载模块之前,您也无法访问 notebook 变量,因为您没有参考。 解决方案是制作第三个模块,我们称之为“notebook.py”,它只是一个空文本文件。

      在您的主程序中,您首先调用“导入笔记本”来创建笔记本模块的全局实例。然后将该模块中的 notebook 属性设置为 true 或 false。

      接下来,导入 api。从 api,也导入 notebook 模块。 Python 很聪明,它只是为您提供对同一对象的引用,而不是再次加载模块。现在您可以使用此模块的“notebook”属性来检查要加载的子模块。

      最终的代码如下所示:

      notebook.py:

      #no actual code here
      

      main.py

      import notebook
      notebook.notebook=True
      import api
      

      api.py

      import notebook
      if notebook.notebook:
          from tqdm import tnrange as trange
          from tqdm import tqdm_notebook as tqdm
      else:
          from tqdm import trange
          from tqdm import tqdm
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-21
        • 2022-12-01
        • 2020-11-22
        • 1970-01-01
        • 2020-11-20
        • 2017-12-04
        • 2016-03-01
        • 1970-01-01
        相关资源
        最近更新 更多