3

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

__all__ = [
        'Submodule1',
        'Submodule2'
]

从我阅读的文档中,我应该能够调用import custom_module并访问该包,但是这并没有发生。如何让 python 识别我的包?我正在使用 python 3.2

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

4

2 回答 2

8

您会混淆两个不同的概念:模块

一个模块就是你所想的那样:一个包含类、变量等的 Python 脚本。您可以通过其文件名导入它,然后可以访问其命名空间中的变量。

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

默认情况下,唯一被导出(as package.thing)的是里面定义的变量__init__。如果你想submodule作为可用的package.submodule,你需要在里面导入它__init__

__all__是一个相关的概念。简而言之,它定义了当你这样做时要导入from package import *的内容,因为 Python 不容易弄清楚应该是什么。你一般不需要它。

于 2012-09-18T11:06:36.537 回答
7

sys.path保存 Python 搜索路径。在尝试使用import您的模块和包之前,请将其设置为包含您的路径:

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

Python 文档和此问题中的更多详细信息

于 2012-09-18T11:44:28.787 回答