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

时间:2017-11-14 00:26:41

标签: python

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

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

对于文件结构:

  • SubmoduleConfusion /
    • 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 个答案:

答案 0 :(得分:0)

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

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

我在我创建的大多数模块中都使用了这个模板setup.py和setup.cfg。它使用setuptools_scm,它将使用git中的版本(标签)为项目定义setup.py中的版本。

换句话说,在尝试安装模块或上传模块之前,您需要git tag 0.1.0git push --tags

我的setup.py还会推断模块的名称与父目录的名称相同(github项目名称)

所以目录应该看起来像这样

my_module

  • 图像
  • my_module
    • __主__。PY
  • setup.py
  • setup.cfg
  • README.md

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

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