参考:http://codereview.stackexchange.com/questions/20428/accessing-the-contents-of-a-projects-root-directory-in-python

 

有时候开发稍大一点的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 路径:

  1. 相对路径: ../logs/db.log 。这种方式不太方便,因为模块的目录结构改变的可能性较大。

  2. 绝对路径:<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'