首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何组织python模块和包

如何组织python模块和包
EN

Stack Overflow用户
提问于 2019-02-18 13:58:52
回答 1查看 511关注 0票数 0

所以我写了一个模块A和一个专门的测试文件。这个模块可以单独使用,但我编写它作为我编写的第二个模块的“基础”。第二个模块绝对需要第一个模块,也有自己的测试文件.最后,我编写了基于前两个模块的第三个模块。换言之:

  • 模块A,可以不用B或C。
  • 模块B需要模块A,可以不使用C。
  • 模块C需要模块B(也需要A)

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

从今天起,我将每个包作为一个包来处理,但是要使用C安装A和B似乎有点麻烦:

代码语言:javascript
复制
+ moduleA
    - moduleA.py
    - test_moduleA.py
+ moduleB
    - moduleB.py
    - test_moduleB.py
+ moduleC
    - moduleC.py
    - test_moduleC.py

所以我在考虑像这样合并:

代码语言:javascript
复制
+ moduleC
    - moduleA.py
    - moduleB.py
    - moduleC.py
    + tests
        - test_moduleA.py
        - test_moduleB.py
        - test_moduleC.py

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-02-18 20:13:37

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

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

在B中:

代码语言:javascript
复制
setup(
    …
    install_requires=[A]
    …
)

在C中:

代码语言:javascript
复制
setup(
    …
    install_requires=[B]
    …
)

在安装时,不需要声明对A的依赖关系为B,因为它带来了A。

这样安装pip install A A时将单独安装;安装pip install B B时将安装A;安装pip install C C时将同时安装A和B。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54748927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档