Python 是否需要在其他文件中导入相同的模块?

Python 是否需要在其他文件中导入相同的模块?,python,Python,我有两个模块,都在同一个目录中。我正在两次导入twitter包。 在我的mainTwitterAnalyzert.py和LibOverrider.py中,我真的不喜欢这个解决方案。我想把它保存在不同的文件中,因为它可能会变得更大 我首先运行TwitterAnalyzert.py,然后覆盖twitter模块中的一些方法 我找到了这个话题。回答:当您导入数学时,它被导入并放入sys.modules。接下来,您将导入math,它将检查math是否在sys.modules中并从那里获取。 看看另一个话

我有两个模块,都在同一个目录中。我正在两次导入
twitter
包。 在我的mainTwitterAnalyzert.pyLibOverrider.py中,我真的不喜欢这个解决方案。我想把它保存在不同的文件中,因为它可能会变得更大

我首先运行TwitterAnalyzert.py,然后覆盖twitter模块中的一些方法

我找到了这个话题。回答:
当您导入数学时,它被导入并放入sys.modules。接下来,您将导入math,它将检查math是否在sys.modules中并从那里获取。

看看另一个话题,我不必担心导入两次。但我有种感觉有些不对劲。我不知道这是否有什么结论

为什么我必须在每个文件中导入?在导入和执行
overrider()
之前,我导入了
twitter
,但仍然缺少它:
NameError:没有定义名称“twitter”

导入一次-->失败

导入2次-->正常并正确覆盖

# Tree
.
|--Readme.md
|--\TwitterAnalyzer
   |--LibOverrider.py
   |--TwitterAnalyzer.py
   |--__init__.py  # empty file

#LibOverrider.py

导入twitter#导入模块有两件重要的事情:它“加载”模块,并将其绑定到当前模块的命名空间。如果不在第二个模块中进行导入,那么第二个部分就是您缺少的部分。因此,尽管
twitter
模块仍处于“加载”状态,但
LibOverrider
模块中的任何内容都不知道如何访问它。

导入模块有两件重要的事情:它“加载”模块,并将其绑定到当前模块的命名空间。如果不在第二个模块中进行导入,那么第二个部分就是您缺少的部分。因此,尽管twitter的
twitter
模块仍然“加载”,
LibOverrider
模块中的任何内容都不知道如何访问它。

您需要导入,以便在当前模块中定义导入的名称。您的
LibOverrider.py
中需要导入
import
,因为它无法知道什么是
twitter
。由于
名称错误
,它将在LibOverrider import overrider的
点失败。除非在包含
twitter
的命名空间中定义了
overrider
,否则您需要在模块中专门进行导入。您需要导入,以便在当前模块中定义导入的名称。在
LibOverrider.py
中需要导入
import
,因为它无法知道是什么
twitter
。由于
名称错误
,它将在LibOverrider import overrider的
点失败。除非在包含
twitter
的命名空间中定义了
overrider
,否则您需要在模块中专门进行导入。确定。谢谢,这就解释了一切。看起来导入是绑定namespace.Ok的最简单方法。谢谢,这就解释了一切。看起来导入是绑定命名空间的最简单方法。
# LibOverrider.py
import twitter  # <-- I want to get rid of this

def overrider():
    def show_user_items(self):
        return self.__dict__.items()

    twitter.User.items = show_user_items
    print("Added twitter.User.items")
# TwitterAnalyzer.py

import twitter  # <-- I import this firsts
import json
from LibOverrider import overrider

overrider()  # <-- overriding methods in twitter module

... # rest of code