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包之间引用_python 子包引用父包和其他子包相关推荐

  1. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  2. python中的引用_Python中的引用

    我有一个多播网络,需要不断地向所有其他用户发送数据.我不想让程序员不断地改变数据包的发送方式.正因为如此,我试图找出如何引用Python中的任何对象或变量(我是Python新手),这样用户就可以修改它 ...

  3. python中的引用类型_Python 中的引用和类属性的初步理解

    最近对Python 的对象引用机制稍微研究了一下,留下笔记,以供查阅. 首先有一点是明确的:「Python 中一切皆对象」. 那么,这到底意味着什么呢? 如下代码: #!/usr/bin/env py ...

  4. python怎么调用文件_python 中如何引用头文件

    python 引入 导入 自定义模块, python 引入 导入 外部文件 python 引入 导入 自定义模块, python 引入  导入 外部文件 项目中想使用以前的代码,或者什么样的需求致使你 ...

  5. python import如何使用_python之import引用

    关于python的import引用的最大关键是init.py文件的作用,这个文件对于import的方法使用至关重要. 这个是我在搭建自动化框架过程中用到的import的方法使用. 比如说,我现在log ...

  6. python相对引用_Python 模块相对引用

    文件结构如下 python_directory/ ├── __init__.py └── app ├── __init__.py ├── sub1 │   ├── __init__.py │   └─ ...

  7. python表情包斗图_Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  8. python方法之间加点_python中技巧

    1.使用xpath从html文档得到其中元素: 123we为了得到其中的123we元素 tree=html.fromstring(***.text) tt=list(set(tree.xpath(&q ...

  9. .net项目与下载包之间不兼容时,如何下载NuGet之前版本的包

    直接使用install下载会获取最新版本的包,但是此时出现了与项目环境版本不兼容的问题: [1]进入NuGet官网,点击version [2]根据年份选择一个之前的版本点入 [3]点击Framewor ...

  10. vue3子组件修改父组件值,vue3 子组件修改属性

    如何在TypeScript中应用像Jquery之类的第三方JavaScript框架 要在TypeScript引用第三方JavaScript库和框架,首先要了解TypeScript的类型定义文件. Ty ...

最新文章

  1. Docker配置远程连接端口
  2. hibernate中的hql查询语句list查询所有与iterate查询所有的区别
  3. spring boot实现软删除
  4. java 静态内存图
  5. CentOS6.4安装Samba(匿名)共享服务器
  6. 一休和尚 小布偶 晴天娃娃
  7. 一个迷你ASP.NET Core框架的实现(下)
  8. redis查询所有key命令_想在生产搞事情?那试试这些 Redis 命令
  9. python基础(16)之 日期
  10. 结构设计模式 - Flyweight设计模式(享元设计模式)
  11. 区块链安全的奥秘之一:非对称加密
  12. 我对骨骼动画的理解(最精减的骨骼动画类)
  13. 磁力计椭球拟合使用篇 IMU 加速度、电子罗盘校准
  14. win10 下 acdsee7 在普通账户下无法运行并崩溃的 BUG
  15. 尚学堂第十一章多线程习题答案
  16. Java中进行Debug断点调试
  17. Vue-cli配置代理服务器,解决跨域请求问题
  18. 【飞鱼SEO】sem竞价的特点以及相关规则
  19. Win10 schtasks 不稳定问题
  20. Python爬虫-网贷之家P2P机构排名查询

热门文章

  1. CAS:compare and swap
  2. ioctl(), ioctl_socket()
  3. __nonnull((1)) 未完待续
  4. 三菱的触摸屏usb驱动_如何实现一个TK6071IP的触摸屏驱动两个三菱FX1S-30MT的PLC?...
  5. vld不输出泄漏信息_UV固化设备不单单只有灯管!还有哪些辅动部件?
  6. Dajngo之ajax(get和post)请求(亲测)
  7. linux大数据命令操作
  8. 学校计算机教室局域网的建立,校园局域网组建及配置.pdf
  9. 18秋c语言程序设计作业答案,西工大18秋《C语言程序设计》平时作业答案.docx
  10. 单机mongodb最大_mongodb单机多实例主从配置