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,中国电力出版社.
python3导入子模块的更多相关文章
- python3 导入模块
python3导入模块和python2 有些不同 需要指定相对目录 如,在Project下有一个nlp目录里面有一个ltp模块,则 from n1.ltp import Clawer
- 【笔记】Python3导入包规则
例如:这里给出了一种可能的包结构(在分层的文件系统中): sound/ 顶层包 __init__.py 初始化 sound 包 formats/ 文件格式转换子包 __init__.py wavrea ...
- Python3导入cookielib失败
Python 3 改成 http.cookiejar了,所以只要改成import http.cookiejar就自动导入cookiejar了,如果还是不行,就把所有的.pyc删掉试试.
- Python3导入自定义模块的3种方式
前话 最近跟着廖雪峰的教程学到 模块 这一节.关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/001431608955 ...
- python3导入sqlite3报错
今天把本地运行OK的scrapy爬虫程序捣鼓到服务器上运行,结果报了以下错误 2018-10-11 19:00:19 [twisted] CRITICAL: Unhandled error in De ...
- python3导入自定义模块
模块是个好东西啊,大牛们开源共享许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 ↓ https://pypi.python.org/pypi 因为刚入门所有有很多细节不懂,在网上搜寻资料的 ...
- python3 导入包总提示no moudle named xxx
一.python中的包有三种 1.python自带的包,如sys, os 2.python的第三方库,如 requests, selenium 3.自己写的.py文件 二.今天主要说下导入自己写的包 ...
- Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因
Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因 原因之1: 例如有这样的一个包和它的模块: Test __init__.py Mod ...
- python3——模块
今天去听一个关于创业的讲座,心疼自己在那个地方站了 一个多小时(QAQ)我是心疼自己傻呀! 手机打王者之后就没有电了,一直站在那儿! 不过最后还是结束了,以后你们也会有很多讲座的,希望学弟学妹好好听讲 ...
随机推荐
- MySql——使用where子句过滤数据
示例使用的数据表在上一个博客中创建的https://www.cnblogs.com/lbhym/p/11895968.html 参考资料:<Mysql必知必会> 1.使用where子句 示 ...
- 【Error】Maven Dependency 下载失败问题
原文 前言 在使用Maven私服Sonatype Nexus的时候,经常会出现依赖包找不到的问题. 此时通过浏览器去私服页面查看,发现依赖包坐标是存在的,对应的文件(比如jar文件). 或者私服上面也 ...
- Leetcode算法【114. 二叉树展开为链表】
上周通过一位小伙伴,加入了一个氛围很好的小群,人不多,但是大家保持着对知识的渴望,让我很感动. 我自己也有一个群,人数也不多,但是能真正互动起来一起学习,一起进步的,还是太少.所以,现在也在学习如何让 ...
- 搭建Redis三主三从集群
Redis三主三从集群规划 10.0.128.19 使用端口 7000 7001 10.0.128.22 使用端口 7002 7003 10.0.128.23 使用端口 7004 7 ...
- 附009.Kubernetes永久存储之GlusterFS独立部署
一 前期准备 1.1 基础知识 Heketi提供了一个RESTful管理界面,可以用来管理GlusterFS卷的生命周期.Heketi会动态在集群内选择bricks构建所需的volumes,从而确保数 ...
- VLAN实验(1)Access接口
1.选择两台S3700的交换机,5台PC机,并按照下图链接好并填写IP,完成此拓扑图 2.由于现在我们还没有划分VLAN,这5台PC,还在同一个VLAN中,现在我们启动所有的设备,这是所有的主机应该是 ...
- 《JAVA 程序员面试宝典(第四版)》之循环、条件、概率
分享内容:关于集合的使用 书页号码:77页 题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasd ...
- oracle使用parallel并行,多线程查询
insert into tmp (select /*parallel (a, 4)*/ * from plsuer.as_cdrindex_info_h partition(P_20170430) w ...
- 【阿里巴巴-高德-汽车事业部】【内推】Java技术专家、前端技术专家、C++技术专家(长期招聘)
简历接收邮箱:yx185737@alibaba-inc.com 邮件请备注来自CSDN 一.Java技术专家 职位描述 研究汽车智能化和在线服务前沿技术,从事在线数据服务和车联网服务的设计和研发 负责 ...
- Spring Security框架下实现两周内自动登录"记住我"功能
本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...