【问题标题】:Typical Naming Conventions for Python Directories in Packages包中 Python 目录的典型命名约定
【发布时间】:2011-05-10 19:35:38
【问题描述】:

问题
我想知道是否有命名计划作为模块导入的 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 的驱动程序时运行良好,但在尝试导入我的签证驱动程序以及 pyVisa 的“签证”模块时遇到了问题。诊断问题非常容易,但是将我的签证驱动程序文件夹重命名为“visa_dir”的修复使代码更难阅读(IMO)。

import drivers.visa  

对比

import drivers.visa_dir  

有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: python directory naming-conventions


    【解决方案1】:

    每个模块的命名空间都是唯一的,因此即使您有两个名为visa 的模块,只要避免将它们导入同名的同一个命名空间,您就不会遇到任何问题。我更喜欢绝对进口:

    import drivers.visa
    import pyVisa.visa
    

    或者你也可以使用as:

    from drivers import visa
    from pyVisa import visa as pyvisa
    

    ...等等。只是要小心你如何导入东西。我希望(作为最终用户)在包中逻辑地构建模块,而不用担心为我预先修改它们。

    【讨论】:

    • 要添加此内容,请参阅 this blog postPEP 221
    • +1 绝对导入我并没有真正考虑过。这将显示我对 Python 的一些新鲜感,但是内置模块呢?是否有类似的方式以相同的方式导入它们?以数学为例(我能想到的更通用的数学之一)。
    • 当然你可以在标准库上使用相同的导入技巧。
    • 在从 X 导入数学的用例中。什么是'X'? :)
    • 在您的 PYTHONPATH 上作为 X 可用的包或模块。如果您的命名空间中还没有math,则不会有任何问题。这是另一篇要查看的文章:stereoplex.com/blog/understanding-imports-and-pythonpath
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2011-01-25
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多