Python包中目录的典型命名约定
问题
我想知道在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
...等等。导入东西的时候要小心。我作为最终用户,更希望你能把模块在包里结构化得合理一些,而不是为了我而提前搞得很复杂。