[英]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流程提取的,并组装成一个大致类似于
在开发人员模式下,两个项目分别存在,我从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.