如何组织我的python模块和包

问题描述 投票:0回答:1

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

  • 模块A,可以在没有B或C的情况下使用。
  • 模块B需要模块A,无需C即可使用
  • 模块C需要模块B(也是A)

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

截至今天,我将每一个视为一个包,但是为了使用C安装A和B似乎有点沉重:

+ 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类平台,并最终pip。

pip package folder python-module
1个回答
0
投票

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

为了正确安装,模块应该声明依赖关系:B依赖于A和C直接依赖于B并且间接(通过B传递)依赖于A.这种依赖关系应该在setup.py中声明:

在B:

setup(
    …
    install_requires=[A]
    …
)

在C:

setup(
    …
    install_requires=[B]
    …
)

无需在安装时将A依赖于A作为B,就会带来A。

这种方式安装pip install A A时将单独安装;安装pip install B B时将安装A;安装时,pip install C C将同时安装A和B.

© www.soinside.com 2019 - 2024. All rights reserved.