如何组织我的python模块和包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何组织我的python模块和包相关的知识,希望对你有一定的参考价值。
所以我写了一个模块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。
答案
这些模块似乎是独立的,因此它们应该单独开发:单独的开发目录,单独的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.
以上是关于如何组织我的python模块和包的主要内容,如果未能解决你的问题,请参考以下文章