如何按名称导入自定义python包

时间:2012-09-18 11:00:49

标签: python module python-3.x python-module

我创建了一个名为“custom_module”的文件夹,我在文件夹中包含__init__.py,其中包含:

__all__ = [
        'Submodule1',
        'Submodule2'
]

从我阅读的文档中我应该能够调用import custom_module并获取对包的访问权限,但这不会发生。如何让python识别我的包?我正在使用python 3.2

更新 该包不在python文件夹中。 python环境如何找到它,因此我可以通过名称成功导入它。

2 个答案:

答案 0 :(得分:6)

sys.path拥有Python搜索路径。在尝试import模块和软件包之前,请将其设置为包含您的路径:

import sys
sys.path.insert(0, 'your_path_here')
import custom_module

Python docs和此question

中的更多详细信息

答案 1 :(得分:5)

您有两个截然不同的概念:模块

模块是您认为的:包含类,变量等的Python脚本。您可以通过其文件名导入它,然后可以访问其命名空间中的变量。

是一组模块,它们在文件夹中组合在一起。如果文件夹包含名为__init__.py的文件,Python将允许您导入整个文件夹,就像它是一个模块一样。这将运行__init__中的代码,但不一定会导入文件夹中的所有模块。 (这是一个深思熟虑的设计选择:包通常非常大,导入所有模块可能需要很长时间。)

默认情况下,导出的唯一内容(如package.thing)是__init__中定义的变量。如果您希望submodule package.submodule可用__init__,则需要在__all__内导入。

from package import *是一个相关的概念。简而言之,它定义了{{1}}时导入的内容,因为Python不容易弄清楚应该是什么。你通常不需要它。