代码之家  ›  专栏  ›  技术社区  ›  James T.

如何将一个模块用作独立的CLI以及另一个模块(API)的子模块?

  •  1
  • James T.  · 技术社区  · 8 年前

    我想弄清楚如何让一个模块独立运行(作为CLI)和作为另一个模块的子模块(作为API)。

    最小示例: http://www.filedropper.com/submoduleconfusion-master


    对于文件结构:

    • 子模块融合/
      • mod_a/
        • mod_a.py

    假设有一个函数位于 SubmoduleConfusion.mod_a.mod_a 然后我会使用 from mod_a.mod_a import f


    由于mod_a也可以作为自己的独立模块运行,

    • mod_a/
      • mod_a.py

    from mod_a import f

    1 回复  |  直到 8 年前
        1
  •  0
  •   James T.    8 年前

    最好的做法是使用控制台脚本的入口点使模块pip可安装(在模块路径的1步之外添加setup.py)。

    https://github.com/jtara1/misc_scripts/tree/master/misc_scripts/templates

    我使用这个模板设置。py和设置。在我创建的大部分模块中。它使用setuptools\u scm,该scm将使用项目git中的版本(标记)来定义设置中的版本。py。

    换句话说,你需要 git tag 0.1.0 和 git push --tags 在尝试安装模块或将其上载以进行安装之前。

    我的设置。py还将推断模块的名称与父目录的名称相同(github项目名称)

    目录应该是这样的

    my_模块

    • 图像
    • my_模块
      • __main__u;。py公司
    • 设置。py公司
    • 设置。cfg公司
    • 自述文件。医学博士

    当前在setup中的setup函数中定义的别名的名称。py,稍后可能会将其移动到变量

    https://github.com/jtara1/misc_scripts/blob/master/misc_scripts/templates/setup.py#L113