在一個多模塊的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 路徑:
相對路徑:
../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‘
在一個多模塊的python項目中,如何在子模塊中引用項目的根目錄?