Python:如何导入与子包同名的模块?

发布于 2025-01-07 23:43:02 字数 394 浏览 1 评论 0原文

我还没有遇到这个问题,但我很好奇如何导入与子包同名的模块。例如,一个可能的模块结构可能如下所示:

mymodule\
    __init__.py
    string.py

现在,如果我需要 mymodule.string 子包 string 模块,该怎么办?随每个 Python 发行版一起从同一目录中的包中交付,例如 __init__.py ?以下代码行全部导入子包。

from   .                import string
import mymodule.string  as string
import string

I haven't come across this problem yet, but I'm curious about how to import a module that has the same name as a sub-package. For instance, a possible module-structure could look like this:

mymodule\
    __init__.py
    string.py

Now, what if I need the mymodule.string subpackage and the string module that is delivered with every Python distribution from a package that is within the same directory, such as __init__.py? The following lines of code all import the subpackage.

from   .                import string
import mymodule.string  as string
import string

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

走走停停 2025-01-14 23:43:02

在 Python 2.5 或 2.6 中,您可以使用:

>>> from __future__ import absolute_import

这告诉 Python 所有非显式相对的导入都应被视为绝对导入。即,使用此声明后,您可以使用以下方式访问内置字符串模块和您自己的字符串模块:

>>> import string as the_builtin_string_module
>>> from . import string as my_package_string_module

我相信这成为Python 2.7(和Python 3.0)中的默认设置。

有关详细信息,请参阅:http://www. python.org/dev/peps/pep-0328/#rationale-for-absolute-imports

In Python 2.5 or 2.6, you can use:

>>> from __future__ import absolute_import

Which tells Python that all imports that aren't explicitly relative should be treated as absolute. I.e., after using this declaration, you can access both the builtin string module and your own string module using:

>>> import string as the_builtin_string_module
>>> from . import string as my_package_string_module

I believe that this becomes the default in Python 2.7 (and Python 3.0).

For more info, see: http://www.python.org/dev/peps/pep-0328/#rationale-for-absolute-imports

乱世争霸 2025-01-14 23:43:02

您不必将其作为顶级导入来导入。

只需 import mymodule.stringfoo = mymodule.string.baz() 等。

如果您确实想将子包用作 string,您可以将其导入作为字符串,但首先执行诸如导入字符串作为内置字符串之类的操作

You don't have to import it as a top level import.

Just import mymodule.string, foo = mymodule.string.baz(), etc.

If you really want to use the subpackage as string, you can import it as string, but first do something like import string as builtinstring

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文