1. 程式人生 > >在一個多模塊的python項目中,如何在子模塊中引用項目的根目錄?

在一個多模塊的python項目中,如何在子模塊中引用項目的根目錄?

python

參考: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‘


在一個多模塊的python項目中,如何在子模塊中引用項目的根目錄?