【发布时间】: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.asshapemodule 所以你当然不会在 sys.modules 中找到它。
标签: python python-3.x python-import sys python-3.7