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__文件.不影响最后结果.
参考资料
- python官方文档 The import system
- Create a python package 2013
- Paul Barry著,林琪,郭静等译,Head first python,p41-p43,中国电力出版社.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义