有时候开发稍大一点的python项目,需要用到多个模块,多层目录。而在项目的子目录中的模块,有时候需要存取项目其他目录中的文件或模块。
比如:
项目文件布局如下:
my_project
|- main.py
|- main.cfg
|- module
| |- mod1.py
| |- mod2.py
|- logs
|- db.log
|- app.log
现在要求:在项目子目录module中的模块 mod1 想要把执行日志写到 logs 目录下的 db.log 文件中。
mod1 模块大概有两种方式获得 db.log 路径:
-
相对路径:
../logs/db.log
。这种方式不太方便,因为模块的目录结构改变的可能性较大。 -
绝对路径:
<approot>/logs/db.log
。这种方式比较好,因为 logs 目录基本不太会改变位置。
现在的问题就是:如何在 mod1 模块中获得 项目的根目录 approot?
方法如下:
1.把整个项目做成一个python package,也就是在项目根目录下添加一个空白 __init__.py 文件
2.新增一个 approot.py (名字任意)模块
approot.py:
import os
def get_root():
return os.path.dirname( os.path.abspath( __file__ ) )
3.在 mod1 中:
import approot
dblog = approot.get_root() + '/logs/db.log'
本文转自 Bruceweien 51CTO博客,原文链接:http://blog.51cto.com/bruceweien/1932422