Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python获取当前用户定义包目录的可重用方法?_Python - Fatal编程技术网

用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
的方法会更通用。