python 子包引用父包和其他子包
python 子包引用父包和其他子包
python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢?
例如: python有项目目录结构:
projectdir/
------------------ __init__.py
| ----------------- core/
|----------------- __init__.py
|---------------- a.py
|----------------- b.py
|----------------- common.py
|------------------ subcore/
|-------------------- __init__.py
|-------------------- common.py
|-------------------- test.py
|------------------- plugins/
|------------------- __init__.py
|------------------- mail.py
|------------------- tel.py
|----------------- common.py
|------------------- utils/
|------------------- __init__.py
|------------------- util.py
|-------------------- log.py
1) 现在 a.py要import util和log, 如何实现呢? 很简单, 所有的common.py内容都一样, 如下:
#!/usr/bin/python2.7
#-*- coding: UTF-8 -*-
#######################################################################
import os, sys, inspect
def script_abspath(frame=inspect.currentframe()):
p = os.path.split(inspect.getfile( frame ))[0]
absdir = os.path.realpath(os.path.abspath(p))
return absdir
def script_abspath_parent(frame=inspect.currentframe()):
return os.path.dirname(script_abspath(frame))
def include_dir(subdir=None, frame=inspect.currentframe()):
# NOTES:
# DO NOT USE __file__ !!!
# dir = os.path.dirname(os.path.abspath(__file__))
# __file__ fails if script is called in different ways on Windows
# __file__ fails if someone does os.chdir() before
# sys.argv[0] also fails because it doesn't not always contains
# the path
#
# realpath() will make your script run, even if you symlink it
p = os.path.split(inspect.getfile( frame ))[0]
incdir = os.path.realpath(os.path.abspath(p))
if incdir not in sys.path:
sys.path.insert(0, incdir)
if subdir:
# use this if you want to include modules from a subfolder
incdir = os.path.realpath(os.path.abspath(os.path.join(p, subdir)))
if incdir not in sys.path:
sys.path.insert(0, incdir)
###########################################################
# include dir and parent dirs
absdir = script_abspath()
while os.path.isdir(absdir):
pkgini = os.path.join(absdir, "__init__.py")
if not os.path.exists(pkgini):
break
if os.path.isdir(pkgini):
break
include_dir(absdir)
absdir = os.path.dirname(absdir)
a.py 如下:
#!/usr/bin/python2.7 #-*- coding: UTF-8 -*- # import common import utils.util import utils.log ...
test.py 也一样:
#!/usr/bin/python2.7 #-*- coding: UTF-8 -*- # import common import utils.util import utils.log import plugins.mail ...
就这么简单.
__init__.py是空文件.
python 子包引用父包和其他子包的更多相关文章
- iframe子页面调用父页面javascript函数的方法
1.iframe子页面调用 父页面js函数 子页面调用父页面函数只需要写上window.parent就可以了.比如调用a()函数,就写成: window.parent.a(); 2.iframe父页面 ...
- Vue 组件&组件之间的通信 之 子组件向父组件传值
子组件向父组件传值:子组件通过$.emit()方法以事件形式向父组件发送消息传值: 使用步骤: 定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件: 准备获取数据:父组件c ...
- angular4父组件向子组件传值,子组件向父组件传值的方法
父组件向子组件传值 @Input 文件目录 父组件: father.template.html <h1>父组件</h1> <cmt-child [data]='dat ...
- Vue_(组件通讯)子组件向父组件传值
Vue组件 传送门 子组件向父组件传值:子组件通过$.emit()方法以事件形式向父组件发送消息传值: 使用步骤: 1.定义组件:现有自定义组件com-a.com-b,com-a是com-b的父组件: ...
- js 父子标签同时设置onclick,子标签触发父标签onclick解决办法
js 父子标签同时设置onclick,子标签触发父标签onclick 或 子标签为a 先触发onclick 再触发 a 的 href: 解决方案:在子标签的onclick里写 var ev = win ...
- [Dynamic Language] Python非子包引用
Python非子包引用 python的搜索路径其实是一个列表(sys.path) 导入模块时python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功. 在项目中如果要引用 ...
- [原创]SSIS-执行包任务调用子包且子包读取父包变量
背景: 有时候需要将一个个开发好的独立的ETL包串接起来形成一个独立而庞大的包,如:每家分公司都开发不同的ETL包,最后使用执行包任务来将这些分公司的包给串联起来形成一个独立而完整运行的E ...
- 【原创】SSIS-执行包任务调用子包且子包读取父包变量
背景: 有时候需要将一个个开发好的独立的ETL包串接起来形成一个独立而庞大的包,如:每家分公司都开发不同的ETL包,最后使用执行包任务来将这些分公司的包给串联起来形成一个独立而完整运行的ETL包,此时 ...
- go语言包与包引用
go语言中包(package)与java中的包(package)非常类似,都是组织代码的方式,而且都和磁盘上的目录结构存在对应关系. go语言中,包名一般为go代码所在的目录名,但是与java不同的是 ...
随机推荐
- 使用PL/SQL Developer连接远程DB(本机不安装Oracle客户端)
本文内容亲测可行环境: 服务端:centos6.7 ,oracle 11g r2 ,动态注册,监听端口号:1521 用户端:win7 ,没有安装ORACLE及其客户端 准备文件:plsql ...
- Java实现word文档在线预览,读取office文件
想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...
- Xamarin开发缺少的android_m2repository_rxx.zip下载地址以及MD5
android_m2repository_rxx.zip下载地址以及MD5, 注意:下载后需要改文件名,改为 MD5的值.zip 例如:android_m2repository_r29.zip 需改 ...
- 什么是Hash?
什么是Hash? Hash中文翻译为散列,又成为"哈希",是一类函数的统称,其特点是定义域无限,值域有限.把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换 ...
- Linux学习之CentOS(十三)-----磁盘管理之 磁盘与目录的容量(转) df 与du 命令
磁盘与目录的容量 现在我们知道磁盘的整体数据是在 superblock 区块中,但是每个各别文件的容量则在 inode 当中记载的. 那在文字接口底下该如何叫出这几个数据呢?底下就让我们来谈一谈这两个 ...
- Thread类中的静态方法
1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用. package thread; /** * 线程类的构造方法.静态块是被main线程调用的 ...
- hibernate4整合spring3出现java.lang.NoClassDefFoundError: [Lorg/hibernate/engine/FilterDefinition;
解决办法 原先:<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annota ...
- 微信小程序开发 导入文件说没找到.json的问题
这个真的坑爹 网上的答案也没几个靠谱 说白了就是找个空文件直接创建 然后复制粘贴 反应了这玩意ide不成熟 进去之后直接创了个quick start的源码 也就是我们看的这个网页建议我们下载的源码 老 ...
- 螺旋打印2D数组
//一破题付出血的代价 多思考!public static void offer(int [][]a){ ,right=a.length-,low=,high=a[].length-; while(l ...
- Java网络爬虫Hello world实现——Httpclient爬取百度首页
1.创建Maven项目 2.Httpclient Maven地址 <dependency> <groupId>org.apache.httpcomponents</gro ...