【问题标题】:Check if method is imported, from X import Y检查方法是否被导入,从 X 导入 Y
【发布时间】:2019-01-17 07:50:28
【问题描述】:

在 Python 3.7 中,我想导入一些方法并稍后在同一脚本中使用它们。在此之前,我想检查它们是否正确导入。

根据this 的回答,我可以检查一个模块是否完全导入到脚本中,但是如果我只使用form from X import Y 导入一种方法呢?

我做了什么

我做了以下sn-p:

from shapely.geometry import asShape
from shapely.geometry import Point
import sys

if 'shapely.geometry.asshape' in sys.modules:
  print('Shapely Geometry asshape ok')
else:
  print('Shapely Geometry asshape NOT loaded')
  
if 'shapely.geometry.point' in sys.modules:
  print('Shapely Geometry point ok')
else:
  print('Shapely Geometry point NOT loaded')

这给了我以下结果:

Shapely Geometry asshape 未加载

Shapely 几何点确定

重复问题

我不认为这是一个重复的问题,因为 SO 上的所有其他问题都是关于检查模块是否已导入(使用 import Z 的形式),而不仅仅是某些方法。

【问题讨论】:

  • 如果您从 Python 中的模块导入名称,该模块会被解释并存储在 sys.modules 中,并且该名称会从该模块引用到您的导入命名空间中。如果您从同一模块导入其他名称,它会从 sys.modules 重用,并且只会创建一个新引用。
  • 您不必检查名称是否“正确导入” - 导入成功或引发 ImportError。此外,'Point' 是在 shapely.geometry.point 中定义的类(不是模块)(并由 shapely.geometry cf github.com/Toblerity/Shapely/blob/master/shapely/geometry/… 导入,这就是您在 sys.modules 中找到 'shapely.geometry.point' 的原因)和` asShape` 是在 shapely.geometry.geo 中定义的函数 - 没有 shapely.geometry.asshape module 所以你当然不会在 sys.modules 中找到它。

标签: python python-3.x python-import sys python-3.7


【解决方案1】:

内置函数 dir() 将为您提供一个包含所有导入的列表。您本地导入的函数也将出现在那里。您可以使用以下方式检查:

'myFunction' in dir ()

【讨论】:

    【解决方案2】:

    无论你是从一个模块中只导入一个函数,还是导入整个模块本身,整个模块总是被导入到sys.modules。因此,在您的情况下,您必须检查导入的模块而不是函数:

    'shapely.geometry' in sys.modules
    

    看看这个问题'import module' vs. 'from module import function'

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 2020-04-03
      • 2017-12-05
      • 1970-01-01
      • 2018-04-15
      • 2012-03-28
      • 2019-09-17
      • 2022-07-04
      相关资源
      最近更新 更多