用Python获取当前用户定义包目录的可重用方法?
对于以下目录结构,我想通过用Python获取当前用户定义包目录的可重用方法?,python,Python,对于以下目录结构,我想通过log\u manager.py将日志写入my\u package/logs文件夹 my_package/ my_package/ __init__.py main.py log_manager.py logs/ setup.py 我想确保从系统中的任何目录执行入口点都可以一致地将日志写入my_package/logs。 一种方法是假设目录结构,并获取log\u manager.py的父目
log\u manager.py
将日志写入my\u package/logs
文件夹
my_package/
my_package/
__init__.py
main.py
log_manager.py
logs/
setup.py
我想确保从系统中的任何目录执行入口点都可以一致地将日志写入my_package/logs
。
一种方法是假设目录结构,并获取log\u 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\u manager.py
中定义一个函数,但不确定这是否是最好的方法?这个函数似乎是一个非常常见的特性,我希望使用更简单的方法
def get_package_dir():
package_dir = os.path.abspath(os.path.join(__file__, '..')))
return package_dir
我不太确定您在寻找什么,但您是否可以在log_manager.py中放置方法,将日志写入日志/并从项目中的任何位置导入日志管理器?您可以使用单独的plot_manager.py将绘图转储到plots/setuptools“模块提供帮助”方法中,以定位模块的绝对路径
from pkg_resources import resource_filename as resource
package_dir = resource('my-package', 'log_manager.py')
log_dir = os.path.join(package_dir, 'logs')
尽管如此,我认为在模块目录中编写日志不是一个好的做法。你能
导入我的\u包
并使所有与我的\u包相关的内容都成为文件
?不能log\u manager.py
仅仅假设/logs
是它所在目录的子目录吗(通过其自己的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
变量找到)?在同一级别添加其他子目录不会影响这一点。@mgilson我想在同一个包中获取/logs
的目录,而不是从外部调用包。@martineau是的,我可以!我只是想知道是否有更简单的方法,我想找到一个可重用的解决方案来查找包目录,如果有有。是的,这会起作用。但我正在寻找可重用的方法来定位包。请参阅我的编辑。@Jiang Xiang:硬编码资源名称如何可重用?似乎使用类似于\uu file\uuuu
的方法会更通用。