[Dynamic Language] Python非子包引用
Python非子包引用
python的搜索路径其实是一个列表(sys.path)
导入模块时python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功.
在项目中如果要引用同级包或另外目录的包(非子包)时:
- 将引用包路径加入sys.path
- 将引用包路径加入到*.pth文件内,并放入site.getsitepackages() 目录下.
- 当然也可以打包发布,安装到python的特定目录下.
测试代码
查看Python搜索路径列表
In [1]: import sys
In [2]: sys.path
Out[2]:
['',
'/Library/Frameworks/Python.framework/Versions/3.7/bin',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/extensions',]
代码目录
mac-abeen:page_pth_test abeen$ tree -L 3
├── dakjpka
│ ├── __init__.py
│ ├── pa
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── pam.py
│ │ └── pam_rf.py
│ └── pb
│ └── pbm.py
└── tpackage.py
兄弟模块或者主运行程序与包同一级别或存在子包关系时
from package import module
import package
pam.py
1 # -*- coding: utf-8 -*-
2
3
4 def pam_fun():
5 print('p.pa pam_fun')
6
7
8 __all__ = ['pam_fun']
pam_rf.py
1 # -*- coding: utf-8 -*-
2
3 from pam import pam_fun
4
5 if __name__ == "__main__":
6 pam_fun()
同级或另外的包引用
- 直接添加到sys.path.append("package path")
- 使用*.pth文件,放到python的特定目录下.
查看python特定目录
In [3]: import site
In [4]: site.getsitepackages()
Out[4]: ['/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
增加目录内容
mac-abeen:pa abeen$ cat /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/dakj_project.pth
/Users/abeen/abeen/alearn/python/page_pth_test
/Users/abeen/abeen/ap/gitwork/dabda
增加后效果
In [5]: sys.path
Out[5]:
['',
'/Library/Frameworks/Python.framework/Versions/3.7/bin',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages',
**'/Users/abeen/abeen/alearn/python/page_pth_test',**
** '/Users/abeen/abeen/ap/gitwork/dabda',**
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/IPython/extensions',
'/Users/abeen/.ipython']
pbm.py 引用pam.py内的pam_fun如下
1 # -*- coding: utf-8 -*-
2
3 # from dakjpka.pa import pam
4 import dakjpka.pa.pam as pam
5
6
7 def pbm_fun():
8 print('p.pbm pbm_fun')
| 9 pam.pam_fun()
10
11
12 if __name__ == '__main__':
13 pbm_fun()
14
15
16 __all__ = ['pbm_fun']
run
mac-abeen:pb abeen$ python3 pbm.py
p.pbm pbm_fun
p.pa pam_fun
[Dynamic Language] Python非子包引用的更多相关文章
- python 子包引用父包和其他子包
python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...
- [Dynamic Language] Python定时任务框架
APScheduler是一个Python定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.并以daemon方式运行应用. 在APSchedu ...
- 第10.9节 Python子包的导入方式介绍
在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...
- 第10.7节 Python包和子包的定义步骤
一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...
- 简述Python模块和包
我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...
- python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
- Python学习 之 包和模块
1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...
- python模块与包加载机制
模块的搜索路径: When a module named spam is imported, the interpreter searches for a file named spam.py in ...
- python 模块和包
一,模块 1,什么是模块? 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀. 但其实 import 加载的模块分为四个通用类别: 1,使用pyt ...
随机推荐
- github后端开发面试题大集合(二)
作者:小海胆链接:https://www.nowcoder.com/discuss/3615?type=0&order=0&pos=8&page=0来源:牛客网 7.非关系型数 ...
- javaScript一些需要注意的细节
变量声明早于代码运行. 函数声明早于变量声明. this指针代表的是执行当前代码的对象的所有者. JavaScript执行完同步,才能执行异步队列.如:alert,for if while 同步执行, ...
- 20165301 2017-2018-2《Java程序设计》课程总结
20165301 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期待的师生关系 预备作业2:学习基础与c语言学习心得 预备作业3: Linux安装及命 ...
- #JS 异步处理机制的几种方式
Javascript语言的执行环境是"单线程"(single thread,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推) ...
- ubuntu16.04编译安装mysql5.7
1.安装编译依赖 sudo apt-get install make cmake gcc g++ bison libncurses5-dev build-essential 2.下载mysql5.7源 ...
- JS日期、时间 格式化转换方法
Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+& ...
- Chrome谷歌浏览器拓展组件的2种快速安装方法(.crx)
谷歌浏览器拓展有至少2种安装方法,现在简单的介绍下. 第一种.当然是进入谷歌官方的应用商店直接安装 这种方法简单快捷,而且官方支持度够高,唯一的缺点是大陆用户需要“FQ”. 谷歌拓展组件应用商店地址: ...
- [转]kali中eth0网卡突然消失解决方案
前言 不知道怎么kali的eth0网卡突然消失了.这可有点难受啊.在网上查找了一番找到了解决办法,特此记录. 问题 怎么办? 解决办法 首先使用ifconfig -a命令查看所有的网卡接口 发现 ...
- Oracle 默认的几个登陆用户名和密码
默认用户有这么几个,system,sys,scott,hr ,一般scott 和hr 作为你的练习用户.system的默认密码是 manager sys的默认密码是 change_on_install ...
- leetcode 202. 快乐数 python实现
思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...