Python的路径引用

1、以HOME目录为准,进行跳转

sys.path.append(os.path.dirname(__file__) + os.sep + ‘../‘)

from config import swordfishconf
from utils  import log
from utils.mysql_base import MySQLBase

将程序的HOME目录添加到sys.path中,然后以此为准,进行跳转。
例子中对于封装的MySQLBase类访问是先访问utils包,然后从mysql_base.py中找到MySQLBase类

缺点:查看代码的时候当前脚本和包的关系不十分明了,需要调到HOME,然后再从HOME进行逐个查找

问题:如何直接看出当前脚本和包的关系,而不是经过HOME

2、使用absolute_path

配置PYTHONPATH:

export PYTHONPATH=/data1/guosong/opdir/20141017/test:$PYTHONPATH

代码示例:

.
|-- __init__.py
|-- lib
|   |-- __init__.py
|   |-- pack1
|   |   |-- __init__.py
|   |   |-- a.py
|   |   `-- aa.py
|   `-- pack2
|       |-- __init__.py
|       |-- b.py
|-- test.py

test.py的代码如下:

[[email protected] ice_test_m test]# more test.py
#!/usr/bin/env python2.7
#-*- coding:utf8 -*-

from __future__ import absolute_import

from lib.pack1.a import AObject

if __name__ == ‘__main__‘:
    AObject.printword()

从lib.pack1.a中引用类AObject,调用它的静态方法

a.py内容:

[[email protected] ice_test_m pack1]# more a.py
#!/usr/bin/env python2.7
#-* coding:utf8 -*-
from __future__ import absolute_import

#from .a import BObject
from ..pack2.b import BObject

class AObject(object):

    @classmethod
    def printword(self):
        b = BObject(‘a call b class‘)

a.py中又调用上一次目录pack2.b中的BObject

b.py内容为:

[[email protected] ice_test_m pack2]# more b.py
#!/usr/bin/env python2.7
#-* coding:utf8 -*-
#from __future__ import absolute_import

class BObject(object):
    def __init__(self,bstr):
        print "B:%s" % bstr

好处:不用再经过HOME,直接根据相对路径进行跳转

3、absolute_path介绍

4、使用absolute_path遇到的问题

4.1、ValueError: Attempted relative import in non-package

4.2、 ValueError: Attempted relative import beyond toplevel package

【参考资料】

1、http://blog.csdn.net/chinaren0001/article/details/7338041

时间: 2024-08-01 11:18:38

Python的路径引用的相关文章

Python的模块引用和查找路径

模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块):对于解释型的语言会更加直观些,比如PHP的.php文件,在Python中就是.py文件可以认为是一个模块.在"模块"之上有"包",主要是

python的计数引用分析(一)

python的垃圾回收采用的是引用计数机制为主和分代回收机制为辅的结合机制,当对象的引用计数变为0时,对象将被销毁,除了解释器默认创建的对象外.(默认对象的引用计数永远不会变成0) 所有的计数引用+1的情况: 一.对象被创建:1.a = 23 这里23这个对象并没有在内存中新建,因为在Python启动解释器的时候会创建一个小整数池,-5~256之间的这些对象会被自动创建加载到内存中等待调用:a = 23是为23这个整数对象增加了一个引用.执行代码: >>> import sys >

Python搜索路径

转自:http://www.jbxue.com/article/15324.html 在python编程中,模块的导入需要一个叫做"路径搜索"的过程.即在文件系统"预定义区域"中查找 mymodule.py文件(如果你导入 mymodule 的话).这些预定义区域只不过是你的 Python 搜索路径的集合. 默认搜索路径是在编译或是安装时指定的.它可以在一个或两个地方修改.一个是启动 Python 的 shell 或命令行的 PYTHONPATH 环境变量. 该变量

(转)CSS与JS中的相对路径引用简单介绍

javascript和css文件中采用相对路径,其基准路径是完全不同的. 1.javascript引用资源(比如图片)相对路径是以宿主路径(被引用的网页比如你在首页index.php引用了某js文件,则index.php即为宿主)所处位置为基准. 2.css引用资源(比如图片)相对路径是以.css文件所处位置为基准! 大家在html中通常会导入一些外部的css.js文件,而其中一个比较容易被忽视的问题就是路径问题,有时候,我们在css.js中都有通过路径来引入一张图片的需求,当我们采用相对路径的

Python之路【第二十四篇】:Python学习路径及练手项目合集

Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Python技术路径中包含入门知识.Python基础.Web框架.基础项目.网络编程.数据与计算.综合项目七个模块.路径中的教程将带你逐步深入,学会如何使用 Python 实现一个博客,桌面词典,微信机器人或网络安全软件等.完成本路径的基础及项目练习,将具备独立的Python开发能力. 完整的Python学

python之import引用

关于python的import引用的最大关键是init.py文件的作用,这个文件对于import的方法使用至关重要. 这个是我在搭建自动化框架过程中用到的import的方法使用. 比如说,我现在login.py想引用bottom底下的log.py的时候,这个时候,我们如何引用呢? from bottom import log 又比如说,我现在想在test文件中引用login.py那这个时候如何引用? from case.login import login 又比如说,我想在test.py中引用l

Python 对象的引用计数和拷贝

Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己,可通过内建函数id(obj)查看. 2.type,对象的类型决定了该对象可以保存什么类型的值,可用内建函数type(obj)查看: 3.value,即对象的值. 下面是一个例子: >>> str = "hello world" >>> type(str

python中的引用

作为一个python初学者,今天被一个python列表和词典引用的问题折磨了很久,但其实了解了缘由也很简单,记录在此备忘. 首先背书python中的引用对象问题: 1. python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方式.实际上,这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能

JavaScript与CSS相对路径引用的差异

转自:http://blog.csdn.net/luohuidong01/article/details/74938652 JS跟CSS相对路径引用的差异在于他们的参考点不一样,下面举个例子说明一下. 文件目录如下 |—— css | |__ myStyle.css |—— script | |__ myScript.js |—— images | |__ myImage.jpg |—— index.html HTML代码如下 <!DOCTYPE html> <html lang=&qu