gpt4 book ai didi

python - 在Python中获取当前用户定义包的目录的可重用方法?

转载 作者:行者123 更新时间:2023-12-01 08:55:34 25 4
gpt4 key购买 nike

对于以下目录结构,我想通过 log_manager.py 将日志写入 my_package/logs 文件夹。

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

最佳答案

安装工具'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')

尽管如此,我认为在模块目录中写入日志不是一个好的做法。

关于python - 在Python中获取当前用户定义包的目录的可重用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com