【问题标题】:how to stop the import of a python module如何停止导入python模块
【发布时间】:2018-11-08 11:30:57
【问题描述】:

假设我有一个文件my_plugin.py

var1 = 1
def my_function():
    print("something")

在我的主程序中我导入了这个插件

import my_plugin

有没有办法通过类似返回语句的方式静默禁用此插件?

例如,我可以像这样“掩盖”my_function 的行为:

def my_function():
    return
    print("something")

我想知道是否可以为模块执行此操作,以根据我对整个项目的尝试来打开和关闭它。所以像:

return  # this is invalid, but something that says stop running this module
        # but continue on with the rest of the python program
var1 = 1
def my_function():
    print("something")

我想我可以将所有内容都注释掉,这样就可以了……但我想知道是否存在更简洁的东西

--- 目的: 这背后的想法是我有一个可以通过插件扩展的大型代码库。有一个插件目录,因此主程序在该目录中查找并运行其中的所有模块。用例只是在导致问题的插件中放置一个小终止开关,作为临时删除或移动文件的替代方法

【问题讨论】:

  • 看看stackoverflow.com/questions/437589/…。在 python 中卸载模块可能很棘手
  • 我从来不需要这样做。你的用例是什么?这可能是您可以从主程序中解决的问题,以决定是否要导入。
  • 您可以将整个模块内容放在if语句下。您可以将import 语句放在if 语句下。您可以对该模块进行猴子补丁-加载存根模块并将其放入sys.modules['my_plugin']
  • @RobertSeaman 我在问题中添加了我在做什么的解释,谢谢
  • (考虑到您的编辑)这违反了python的禅宗。 “显式胜于隐式。”您应该单独加载每个插件,然后根据需要从主文件中添加或删除它们,而不是加载所有插件。

标签: python


【解决方案1】:

您可以有条件地导入模块:

if thing == otherthing:
   import module

这是python中完整的有效语法。有了这个,您可以在项目开始时在变量上设置一个标志,该标志将根据您在该项目中的需要导入模块。

【讨论】:

  • 还在这些不合适的导入末尾添加 # NOQA 以避免 linter 被它冒犯。更多信息stackoverflow.com/a/45346791/3820185
  • 谢谢,有时候看起来很明显的事情会让人忘记。这与我已有的结构非常吻合
猜你喜欢
  • 2013-12-13
  • 2011-01-11
  • 2011-09-25
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多