gpt4 book ai didi

与现有模块同名的python模块名称

转载 作者:太空狗 更新时间:2023-10-30 01:20:32 24 4
gpt4 key购买 nike

我在“msa”命名空间下组织了许多小型实用程序模块,因此我可以在许多不同的研究项目中使用。目前我把它们组织成这样:

# folder structure:
packages <-- in my pythonpath
--msa
----msa_utils.py
----msa_geom.py
----msa_pyglet.py
----msa_math.py
----etc

# imported and used this like
from msa import msa_pyglet
from msa import msa_math
msa_pyglet.draw_rect(msa_math.lerp(...))

但是我想避免名称中的“msa_”并像这样使用:

# folder structure:
packages <-- in my pythonpath
--msa
----utils.py
----geom.py
----pyglet.py
----math.py
----etc

# imported and used this like
import msa.pyglet
import msa.math
msa.pyglet.draw_rect(msa.math.lerp(...))

从外部导入时,这不应该导致名称冲突,但是当模块本身导入具有冲突名称的模块时,就会出现名称冲突。例如。 msa/pyglet 需要导入 pyglet(外部的),但最终尝试导入自身。同样,任何试图导入标准数学库的模块只会导入我的数学模块。这都是可以理解的。但是处理这个问题的通常的 pythonic 方式是什么?我必须给每个模块文件一个全局唯一的名称吗?

最佳答案

在 Python 2 中,在没有包限定符的包中导入确实首先查找包本地模块。

因此,import pyglet 将在考虑顶级 pyglet 之前找到 msa.pyglet

切换到绝对导入以使 Python 3 行为成为默认行为,其中非限定名称始终是顶级名称:

from __future__ import absolute_import

现在 import pyglet 只能找到顶级名称,而不能找到 msa.pyglet。要引用 msa 命名空间中的其他模块,请使用 from 。导入 pygletfrom msa import pyglet

参见 PEP 328 -- Imports: Multi-Line and Absolute/Relative了解更多详情。

关于与现有模块同名的python模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com