2011-05-10 69 views
8

问题
我想知道是否有计划导入为模块的Python目录的命名规范。这意味着目录中包含一个空白__init__.py包中的Python目录的典型命名约定

背景
直到最近,我已经给它有点想,完全是基于在文件系统层面有意义的名字命名。让我陷入困境的是,在文件系统层面有意义的其他开发人员的独立模块也是有意义的。请考虑以下目录:

+ drivers 
    + prologix 
     - __init__.py 
     - driver_a.py 
     - driver_b.py 
    + visa 
     - __init__.py 
     - driver_a.py 
     - driver_b.py 
    __init__.py 
    ringout.py <-- simple file to ring-out the drivers 

虽然响了prologix的驱动程序时,这个工作得很好,我试图导入我的签证驱动器以及pyVisa的“签证”模块时,遇到了一个问题。这是非常容易诊断的问题,但修复到我的签证司机的文件夹重命名为“visa_dir”使代码更难以阅读(IMO)。

import drivers.visa 

VS

import drivers.visa_dir 

有没有更好的方式来处理呢?

回答

4

每个模块的名称空间是独一无二的,所以即使你有一个名为visa只要你避免将它们导入同一个命名空间与你不会有任何问题,两个名称相同的模块。我倾向于选择绝对导入:

import drivers.visa 
import pyVisa.visa 

或者你也可以使用as

from drivers import visa 
from pyVisa import visa as pyvisa 

...等。小心你如何导入东西。我宁愿(作为最终用户),您的逻辑封装内构建你的模块,而不是担心重整预它们对我来说。

+2

要添加到此,见[这篇博客文章(http://griddlenoise.blogspot.com/2006/10/namespace-packages-in-python.html)和[PEP 221(HTTP:// WWW .python.org的/ dev/PEPS/PEP-0221 /)。 – voithos 2011-05-10 20:52:35

+0

绝对进口+1,我真的没有想到这一点。这将显示我对Python的一些新鲜感,但内置模块又如何?有没有类似的方式来以相同的方式导入它们?以数学为例(我能想到的一个更通用的例子)。 – 2011-05-10 20:55:36

+0

当然你可以使用标准库相同的导入技巧。 – zeekay 2011-05-10 20:59:37