python 模块 子模块_python3导入子模块

基础知识

参考资料1上有一句话Regular packages are traditional packages as they existed in Python 3.2 and earlier. A regular package is typically implemented as a directory containing an init python file. 大概意思是用__init__表示包的形式是3.2及以前版本的用法. 3.2以后官方的规则是使用Namespace packages的形式表示包.最明显的特征就是不再使用__init__文件.

测试环境

python 3.5

举例说明

现在有以下结构的文件:

base是根目录.base下有一个子模块layer1和文件test.py. layer1下有2个模块layer21,layer22,一个文件mainmodule.py. layer21下有文件calc1.py.layer22下有文件calc2.py.

mainmodule.py的内容为

from .layer21 import calc1

from .layer22 import calc2

def run(a, b):

return calc1.add(a, b) + calc2.sub(a, b)

calc1.py的内容为

def add(a, b):

return a + b

calc2.py的内容为

def sub(a, b):

return a - b

test.py的内容为

# coding: utf-8

from layer1 import mainmodule

print(mainmodule.run(1, 2))

注意不存在__init__文件.mainmodule.py用了相对导入.运行test.py可以得到正确的结果.

setup.py用于制作安装程序,内容为

# coding: utf-8

from distutils.core import setup

setup(

name='layer1',

version='0.0.1',

author='zhang3',

author_email='aaa@bb.cn',

packages=['layer1', 'layer1/layer21', 'layer1/layer22'],

description='测试打包',

)

在setup.py所在目录下执行

python setup.py sdist

生成zip文件.

再执行

python setup.py install

安装.再把test.py复制到任意位置.运行都可以得到正确结果.说明打包安装成功.为了兼容python2.7,也可以在模块下放一个空的__init__文件.不影响最后结果.

参考资料

Paul Barry著,林琪,郭静等译,Head first python,p41-p43,中国电力出版社.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值