如何组织我的python模块和软件包

时间:2019-02-18 13:58:53

标签: pip package directory python-module

所以我写了一个模块A和一个专用的测试文件。这个模块可以单独使用,但是我写了它作为我编写的第二个模块的“基础”。第二个模块绝对需要第一个模块,并且还具有自己的测试文件。 最后,我编写了基于前两个模块的第三个模块。换句话说:

  • 模块A,可以不使用B或C。
  • 模块B需要模块A,并且可以在不使用C的情况下使用
  • 模块C需要模块B(也需要模块A)

我的问题是如何对待所有这些模块?例如,我是否应该将每个模块打包,然后在B中导入A,在C中导入B?还是应该将它们全部放在一个包装中?另外,我该如何处理所有测试文件(将它们放在模块旁边,或者放在单个测试文件夹中)?

从今天开始,我将每个人都视为一个软件包,但是必须安装A和B才能使用C似乎有点沉重:

+ moduleA
    - moduleA.py
    - test_moduleA.py
+ moduleB
    - moduleB.py
    - test_moduleB.py
+ moduleC
    - moduleC.py
    - test_moduleC.py

所以我正在考虑像这样合并所有内容:

+ moduleC
    - moduleA.py
    - moduleB.py
    - moduleC.py
    + tests
        - test_moduleA.py
        - test_moduleB.py
        - test_moduleC.py

这是包装我的模块C(及其所有组件)的pythonic方法吗?还是应该将模块嵌套在子包(moduleC.moduleB.moduleA)中?

所有这些操作的目标是导出到类似github的平台,并最终将其导出。

1 个答案:

答案 0 :(得分:0)

这些模块似乎是独立的,因此应该分别开发:单独的开发目录,单独的git存储库。

为正确安装,模块应声明依赖项:B依赖于A,C直接依赖于B,间接(通过B传递)依赖于A。此类依赖关系应在setup.py中声明:

在B:

setup(
    …
    install_requires=[A]
    …
)

在C中:

setup(
    …
    install_requires=[B]
    …
)

在安装A时,无需将对A的依赖声明为B。

这种方式在安装pip install A A时将被单独安装; 在安装pip install B时,B将与A一起安装; 安装pip install C时,C将同时安装A和B。