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

时间:2016-06-30 14:12:53

标签: python python-2.7 python-import

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

import pandas
# then import my own submodules and other things

然后,每次我在函数中使用pandas时,请将子模块中的pandas称为from . import pandas as pdfrom .. import pandas,或者类似的东西。

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

所以从现在开始,我不会在我的__init__中导入pandas并在每个 -function - 中单独导入它,这样可以正常工作,但是重复过多并阻止我进行设置全球大熊猫设置。

这里的首选方法是什么?有没有我缺少的方法?

谢谢。

1 个答案:

答案 0 :(得分:2)

  

... AddHandler import来自pandas来电,我可以定义一些__init__.py'那里的选项(如pandas),它将在整个模块中有效。

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

  

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

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

sys.modules