繁体   English   中英

在我的模块中导入一次外部包,而不将其添加到命名空间

[英]Importing external package once in my module without it being added to the namespace

对于因为无法更轻松地回答我的问题,我深表歉意。 我正在编写一个大包,几乎在每个函数中都广泛使用pandas。 当然,我的第一直觉是创建一个__init__.py

import pandas
# then import my own submodules and other things

然后,每次我在函数中使用pandas时,请从子模块中调用它from . import pandas as pd from . import pandas as pdfrom .. import pandas ,或类似的东西。

但是,如果我这样做,当我加载我的包时,pandas显示为“子模块”,即有一个mypackage.pandas 哪个不伤害任何人,但我猜是不正确的。 避免这种情况的一种方法是在__init__.py的末尾添加del pandas ,这似乎也不是正确的方法。

所以从现在开始,我不会在我的__init__导入pandas并在每个函数中单独导入它,这样可以正常工作,但是过于重复并且阻止我设置全局pandas设置。

这里的首选方法是什么? 有没有我失踪的方法?

谢谢。

...通过从__init__.py调用中import pandas ,我可以在那里定义一些pandas的选项(如pandas.options.display.expand_frame_repr ),它将在整个模块中有效。

他们无论如何都会。 该模块仅在您第一次调用import pandas时加载。 此时,对模块的引用存储在可通过sys.modules访问的模块字典sys.modules 在任何其他模块中import pandas任何后续调用都将重新使用sys.modules的相同引用,因此您更改的任何选项也将适用。

此外,在我看来,从头开始重新导入相同的包需要更长的时间,但我不确定它是否正确。

它实际上应该稍微快一点,因为它不必解析相对路径。 加载模块后,后续调用就像......

import pandas          # pandas = sys.modules['pandas']
import pandas as pd    # pd = sys.modules['pandas']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM