使python3子软件包模​​块可用于在主软件包名称空间中导入

时间:2018-10-24 10:10:04

标签: python-3.x python-import importerror

我具有以下目录结构

import { Component } from '@angular/core';

 interface Employees {
  empID: string;
  name: string;
  gender: string;
  salary: number;
  DOB: Date
}

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
name = 'Angular';
employees: Employees[];
constructor() {

this.employees = [
{ empID: 'empid101', name: 'Jhon', gender: 'male', salary: 1200, DOB: new Date('12/24/2016') }
];

  }
}

Module.py包含

mainpackage
├── __init__.py
└── subpackage
    ├── __init__.py
    └── module.py

使用python3,我正在寻求使module.py模块可用于在mainpackage命名空间中导入。到目前为止,我的主包__init__.py文件看起来像这样

def test():
    print("test called")

我希望能够打电话

from .subpackage import module

但这会抛出

import mainpackage.module

为清楚起见,我希望将测试功能导入到主程序包命名空间中-我需要整个模块。这可能吗 ?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

据我所知,您无法像尝试过的那样在主包的名称空间中使子包的模块可用:

import mainpackage.module

mainpackage的子目录中而不是其他(更深的)子目录中查找模块。

您在mainpackage\__init.py__中尝试的内容是正确的。您的

from .subpackage import module 

将使模块在mainpackage级别可用。如果您输入IPython控制台

import mainpackage
mainpackage.module

将给出以下输出

<module 'mainpackage.subpackage.module' from 'your\path\mainpackage\subpackage\module.py'>

,但是import mainpackage.module仍然无效。如果现在要将module用作实例,则必须使用

from mainpackage import module

这将允许您像这样使用您的功能

module.test

答案 1 :(得分:0)

以这种方式from mainpackage.subpackage import module导入,您不需要在初始化文件中使用from .subpackage import module