对于以下目录结构,我想通过my_package/logs
将日志写入log_manager.py
文件夹。
my_package/
my_package/
__init__.py
main.py
log_manager.py
logs/
setup.py
我想确保从系统中任何目录执行入口点都可以将日志一致地写入my_package/logs
。
一种方法是采用目录结构并获取log_manager.py
的父目录来推断logs/
:
package_dir = os.path.abspath(os.path.join(__file__, '..')))
log_dir = os.path.join(package_dir, 'logs')
但是,如果将来我想添加另一个目录plots
(如下所示),则需要使用类似的方法再次重复我的软件包目录,这是重复的。
my_package/
my_package/
__init__.py
main.py
log_manager.py
logs/
plots/
setup.py
因此,我想找到可重用的方法来定位软件包目录。为此,我可以在log_manager.py
中定义一个函数,但是不确定这是否是最好的方法吗?该功能似乎是一个非常常见的功能,我期待有更简单的方法。
def get_package_dir():
package_dir = os.path.abspath(os.path.join(__file__, '..')))
return package_dir
答案 0 :(得分:1)
setuptools的pkg_resources模块提供了帮助程序方法来定位模块的绝对路径。
from pkg_resources import resource_filename as resource
package_dir = resource('my-package', 'log_manager.py')
log_dir = os.path.join(package_dir, 'logs')
尽管如此,我认为在模块目录中写入日志也不是一个好习惯。
答案 1 :(得分:0)
我不确定您要查找的内容,但是您是否不能仅将方法写入log_manager.py并将其写入logs /并从项目的任何位置导入log_manager?您可以使用单独的plot_manager.py将地块转储到plots /中。