Python非子包引用

python的搜索路径其实是一个列表(sys.path)

导入模块时python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功.

在项目中如果要引用同级包或另外目录的包(非子包)时:

  1. 将引用包路径加入sys.path
  2. 将引用包路径加入到*.pth文件内,并放入site.getsitepackages() 目录下.
  3. 当然也可以打包发布,安装到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()

同级或另外的包引用

  1. 直接添加到sys.path.append("package path")
  2. 使用*.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非子包引用的更多相关文章

  1. python 子包引用父包和其他子包

    python 子包引用父包和其他子包 python引用子目录很简单, 里面放个__init__.py就可以了. 如何在子目录里面引用其他目录(父目录,爷目录和同辈分目录)呢? 例如: python有项 ...

  2. [Dynamic Language] Python定时任务框架

    APScheduler是一个Python定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及crontab类型的任务,并且可以持久化任务.并以daemon方式运行应用. 在APSchedu ...

  3. 第10.9节 Python子包的导入方式介绍

    在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...

  4. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  5. 简述Python模块和包

    我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...

  6. python模块及包的导入

    一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...

  7. Python学习 之 包和模块

    1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...

  8. python模块与包加载机制

    模块的搜索路径: When a module named spam is imported, the interpreter searches for a file named spam.py in ...

  9. python 模块和包

    一,模块 1,什么是模块? 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀. 但其实 import 加载的模块分为四个通用类别: 1,使用pyt ...

随机推荐

  1. go语言版本变化

    The Go Project     Go is an open source project developed by a team at Google and many contributors  ...

  2. 利用vw+rem实现移动web适配布局

    基本概念 1.单位 Px(CSS pixels) 像素 (px) 是一种绝对单位(absolute units), 因为无论其他相关的设置怎么变化,像素指定的值是不会变化的 其实是相对于某个设备而言的 ...

  3. 20165203迭代和JDB测试

    1.使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 public class C { public static void main(Strin ...

  4. Mongodb配置:error:10061 由于目标计算机积极拒绝,无法连接

    相信很多学Node的同学,在进入MongoDB后台管理 Shell的时候都会“遇到error:10061 由于目标计算机积极拒绝,无法连接”这种情况,很多情况都是dbpath与dblog的路径没有配置 ...

  5. ASP.NET:MVC中文件上传与地址变化处理

    目录 文件的上传和路径处理必须解决下面列出的实际问题: 1.重复文件处理 2.单独文件上传 3.编辑器中文件上传 4.处理文章中的图片路径 5.处理上传地址的变化 一.上传文件和重复文件处理 文件处理 ...

  6. Caffe训练AlexNet网络模型——问题二

    训练时,出现Check failed:error == cudaSuccess (2 vs. 0) out of memory,并且accruary = 0,如下图所示: 解决方法:将train_va ...

  7. 用 Java 实现一个快速排序算法

           快速排序是排序算法中效率最高的一种,它是利用递归的原理,把数组无限制的分成两个部分,直到所有数据都排好序为止. 快速排序是对冒泡排序的一种改进.它的基本思想是通过一趟排序将要排序的数据分 ...

  8. C语言可变参数个数

    #include <stdio.h>#include <stdarg.h> void test(const char * format, ...); int main(void ...

  9. CentOS 使用命令设置代理

    全局的代理设置, vim /etc/profile 添加下面内容 http_proxy = http://username:password@yourproxy:8080/ ftp_proxy = h ...

  10. ThinkPHP导入第三方类库Vendor

    详情查看ThinkPHP3.2手册 架构 > 自动加载 章节 vendor('Uploader','','.class.php')