gpt4 book ai didi

python - 在 Python 中导入包

转载 作者:IT老高 更新时间:2023-10-28 21:42:29 26 4
gpt4 key购买 nike

我可能遗漏了一些明显的东西,但无论如何:

当您在 Python 中导入像 os 这样的包时,您可以立即使用任何子模块/子包。例如这有效:

>>> import os
>>> os.path.abspath(...)

但是,我有自己的包,其结构如下:

FooPackage/
__init__.py
foo.py

同样的逻辑在这里不起作用:

>>> import FooPackage
>>> FooPackage.foo
AttributeError: 'module' object has no attribute 'foo'

我做错了什么?

最佳答案

当您导入 FooPackage 时,Python 会搜索 PYTHONPATH 上的目录,直到找到名为 FooPackage.py 的文件或名为 FooPackage 的目录,其中包含一个名为 __init__.py 的文件。但是,在找到包目录后,它会然后扫描该目录并自动导入所有 .py 文件。

这种行为有两个原因。首先是导入模块会执行 Python 代码,这可能需要时间、内存或有副作用。因此,您可能希望导入 a.b.c.d 而不必导入所有巨大的包 a。由包设计者决定 a 的 __init__.py 是否显式导入其模块和子包以便它们始终可用,或者是否让客户端程序能够选择和选择加载的内容。

第二个更微妙,也是一个亮点。如果没有明确的 import 语句(在 FooPackage/__init__.py 或客户端程序中),Python 不一定知道应该将 foo.py 导入为什么名称。在不区分大小写的文件系统上(例如在 Windows 中使用),这可以表示名为 fooFooFOO 的模块fOofoOFoOFOofOO。所有这些都是有效的、不同的 Python 标识符,因此 Python 仅从文件中没有足够的信息来了解您的意思。因此,为了在所有系统上保持一致的行为,它需要在某处显式导入语句来阐明名称,即使在有完整案例信息可用的文件系统上也是如此。

关于python - 在 Python 中导入包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048518/

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