Python包中目录的典型命名约定

10 投票
1 回答
2595 浏览
提问于 2025-04-16 17:23

问题
我想知道在Python中,命名那些打算作为模块导入的目录时,有没有什么标准的约定。也就是说,这个目录里包含一个空的 __init__.py 文件。

背景
直到最近,我对这个问题没怎么考虑过,命名主要是根据文件系统的逻辑来定的。让我遇到麻烦的是,文件系统的命名方式也适用于其他开发者的独立模块。想象一下下面这个目录:

+ 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的驱动时,这样命名没有问题,但当我尝试导入我的visa驱动和pyVisa的'visa'模块时,就出现了问题。虽然很容易找到问题所在,但把我的visa驱动的文件夹重命名为'visa_dir'后,代码看起来就不那么容易理解了(这是我的个人看法)。

import drivers.visa  

与之相比:

import drivers.visa_dir  

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

1 个回答

5

每个模块的命名空间都是独一无二的,所以即使你有两个名字都叫 visa 的模块,只要你避免把它们用相同的名字导入到同一个命名空间里,就不会出现问题。我个人比较喜欢使用绝对导入:

import drivers.visa
import pyVisa.visa

你也可以使用 as 来给模块起个别名:

from drivers import visa
from pyVisa import visa as pyvisa

...等等。导入东西的时候要小心。我作为最终用户,更希望你能把模块在包里结构化得合理一些,而不是为了我而提前搞得很复杂。

撰写回答