繁体   English   中英

如何将此文件夹结构用作Python模块?

[英]How to have this folder structure working as Python modules?

我有两个项目,按照以下结构组织

core
 * src
   * main
     * python
       * module
         * __init__.py
         * tools.py
extension
 * src
   * main
     * python
       * module
         * submodule
           * __init__.py
           * usercode.py

考虑两个src/main/python都在PYPATH

不幸的是,当我import module.submodule.usercode ,我得到的只是

ImportError: No module named submodule

我该如何解决?

编辑1

请注意,我想用tools.py从我的核心模块旁边的usercode.py从我的分机......其中,根据Python模块加载机制,使它不可能对我来说,有一个__init__.py文件在我的extension/src/main/python/module文件夹,就像建议的大多数答案一样。

编辑2

我必须在这里详细说明一些事情

  • 在生产模式下,Python代码是通过maven流程提取的,并组装成一个大致类似于

    • 模组
      • 初始化 .py
      • tools.py
      • 子模块
      • 初始化 .py
      • tools.py
  • 在开发人员模式下,两个项目分别存在,我从extension/src/test运行代码。

显然,我的问题仅存在于开发人员模式下。

packages的文档中:

__init__.py文件是使Python将目录视为包含包所必需的; 这样做是为了防止具有通用名称(例如字符串)的目录无意间隐藏了稍后在模块搜索路径中出现的有效模块。 在最简单的情况下, __init__.py可以只是一个空文件,但它也可以为该程序包执行初始化代码或设置__all__变量,如后所述。

因此,要将module目录视为一个包,您需要在其中添加__init.py__文件:

extension
 * src
   * main
     * python
       * module
         * __init__.py # add this file to treat the directory as a module
         * submodule
           * __init__.py
           * usercode.py

更新:

从您使用的文件夹模式看,它看起来更像是java项目的组织。 python您实际上并不需要如此复杂的结构。 但是,如果您真的想拥有这种结构,则需要向所有文件夹中添加__init__.py

但是我建议的是:

core
   * __init__.py
   * module
     * __init__.py
     * tools.py

extension
   * __init__.py
   * module
     * __init__.py
     * submodule
         * __init__.py
         * usercode.py

然后可以像下面这样导入:

from core.module import tools

要么,

from extension.module.submodule import usercode

请注意每个目录中的__init__.py文件,尽管我删除了一些目录以使结构看起来更具有Python风格。

确保所有python软件包中都包含__init__.py

extension
 * src
   * main
     * python
       * module
         * __init__.py # You're missing one here
         * submodule
           * __init__.py
           * usercode.py

模块还需要一个__init__文件,因此它将是python软件包,而不是常规目录

最后,我在测试类中使用了一个__init__.py ,以便在测试开始时将core代码复制到extension中,并在测试结束时将其删除。 对于代码分发,我依靠一些行家魔术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM