Python 多次导入同一模块
因此,几个小时后,我发现了我的应用程序中出现错误的原因。我的应用程序源的结构如下:Python 多次导入同一模块,python,import,import-hooks,Python,Import,Import Hooks,因此,几个小时后,我发现了我的应用程序中出现错误的原因。我的应用程序源的结构如下: main/ __init__.py folderA/ __init__.py fileA.py fileB.py 实际上,还有大约50多个文件。但这不是重点。在main/\uuuu init\uuuu.py中,我有以下代码:来自folderA.fileA import* 在folderA/_init__.py中,我有以下代码: sys.path.a
main/
__init__.py
folderA/
__init__.py
fileA.py
fileB.py
实际上,还有大约50多个文件。但这不是重点。在main/\uuuu init\uuuu.py
中,我有以下代码:来自folderA.fileA import*
在folderA/_init__.py
中,我有以下代码:
sys.path.append(pathToFolderA)
在folderA/fileB.py
中,我有以下代码:
from fileA import *
问题是fileA会被导入两次。但是,我只想导入一次
解决这一问题的明显方法(至少对我来说)是将某些路径从path
更改为folderA.path
但是我觉得Python一开始就不应该有这个错误。还有哪些其他解决方法不要求每个文件都知道其绝对位置?不要以这种方式修改sys.path,因为它提供了两种访问模块的方法(名称),从而导致您的问题 使用绝对或相反。(不明确的相对导入可以作为旧Python版本的最后手段。) folderA/fileB.py 当然,你应该用特定的名字来代替那颗星。
- 在实际程序中,修改
不是您要做的事情。它损害了模块性和可移植性,与永久设置PYTHONPATH或将模块放在Python可以找到它的地方相比没有任何好处sys.path
- 永远不要使用
。它污染了您的名称空间,使您的代码不可预测import*
- 您不希望folderA出现在
上。它是sys.path
的子包,应始终如此对待。始终使用绝对导入到顶级包:main
而不是import main.folderA
或其他任何内容;这将使您的代码更易于遵循、移动和安装import folderA
from main.folderA.fileA import * # absolute
from .fileA import * # unambiguous-relative
from fileA import * # ambiguous-relative