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

Kon*_*nev 2 python module python-module python-3.x

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

__all__ = [
        'Submodule1',
        'Submodule2'
]
Run Code Online (Sandbox Code Playgroud)

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

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

Kat*_*iel 6

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

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

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

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

__all__是一个相关的概念.简而言之,它定义了在您执行时导入的内容from package import *,因为Python不容易计算出应该是什么.你通常不需要它.

  • 我理解这一切(抱歉,这是一个包而不是模块)。但是,如何让 python 找到我的包,因为当我说 import custom_module 时什么也没有发生。我的包不在 python 文件夹中。 (3认同)

cfi*_*cfi 6

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

import sys
sys.path.insert(0, 'your_path_here')
import custom_module
Run Code Online (Sandbox Code Playgroud)

Python文档和此问题中的更多细节

  • 一般来说,与其让 Python 去寻找非标准的地方,不如将你的包安装到标准的地方。 (2认同)