在一个多模块的python项目中,如何在子模块中引用项目的根目录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在一个多模块的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项目中,如何在子模块中引用项目的根目录?的主要内容,如果未能解决你的问题,请参考以下文章

并发编程-多进程模块介绍

multiprocessing模块创建进程

python multiprocessing模块 介绍

3 - 利用multiprocessing模块开进程

python 3 编程之多进程 multiprocessing模块

并发编程之多进程(实践)