【问题标题】:How to avoid repetitive naming in python packages?如何避免python包中的重复命名?
【发布时间】:2017-05-28 17:21:41
【问题描述】:

假设我正在构建一个模拟香蕉的 python 项目,我将如何构建它?我通常以

开头
mkdir bananas

然后我在作为文件的bananas.py 中进行编码,直到我开始添加自述文件、许可证、贡献者等,并且python 文件只是丢失在元文件中。然后我再次这样做

mkdir bananas
mv *.py* bananas

为了将实际代码与元数据分开。现在我有一个双重的、重复的 dir 结构,

$ ls /path/to/bananas
README
LICENSE
CONTRIBUTORS
bananas/banana.py

所以这最终在

bananas/bananas/banana.py

这对我来说感觉不对。我接触最多的代码被隐藏得太远了。我也讨厌像

这样的进口商品
from bananas.bananas import Banana

我只是想做

from bananas import Banana

有什么想法吗?我错过了什么?我引用HGP

重复的路径会让你的工具和你的 开发商。不必要的嵌套对任何人都没有帮助(除非他们 怀念单体 SVN 存储库)。

【问题讨论】:

    标签: python module package


    【解决方案1】:

    有时这是不可避免的。只需查看标准库的 datetime 模块即可。

    datetime.datetime datetime.datetime.today().date()
    

    您可以进行相对导入。香蕉中的一个文件只需要做

    from bananas import Banana  # or
    from .bananas import Banana
    

    无论如何都建议您通过使其可移动来使您的模块可重复使用 m)

    有些人导入的是模块,而不是类

    from bananas import bananas as bananaModule
    bananaModule.banana()
    

    你也可以给你的项目一个花哨的代号,这样它就变成了:

    from fancyish.bananas import bananas as bananaModule
    

    【讨论】:

    • 谢谢,你知道使用 init 存储香蕉的黑客吗?
    【解决方案2】:

    就我个人而言,我认为这样构建它没有任何问题,而且这是我在自己的项目中所做的。根据我尝试过的一些在线指南,这似乎是推荐的方法。

    例如,作者从Open Sourcing a Python Project the Right Way定义了一个示例项目的结构:

    $ pwd
    ~/code/sandman
    $ tree
    .
    |- LICENSE
    |- README.md
    |- TODO.md
    |- docs
    |   |-- conf.py
    |   |-- generated
    |   |-- index.rst
    |   |-- installation.rst
    |   |-- modules.rst
    |   |-- quickstart.rst
    |   |-- sandman.rst
    |- requirements.txt
    |- sandman
    |   |-- __init__.py
    |   |-- exception.py
    |   |-- model.py
    |   |-- sandman.py
    |   |-- test
    |       |-- models.py
    |       |-- test_sandman.py
    |- setup.py
    

    所以在这种情况下,您最终会得到类似 sandman/sandman/sandman.py 的路径。

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      • 2021-06-07
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多