如何确保python包模块将结果保存到该包的子目录中?

时间:2018-06-16 19:05:55

标签: python path packages

我正在创建一个具有以下结构的包

/package
    __init__.py
    /sub_package_1
        __init__.py
        other_stuff.py
    /sub_package_2
        __init__.py
        calc_stuff.py
        /results_dir

我想确保calc_stuff.py将结果保存到/results_dir,除非另有说明(是的,我不完全确定在我的包中有结果目录是最好的主意,但是它现在应该运作良好)。但是,由于我不知道将从哪个机器运行calc_stuff,我需要使用该软件包,或至少my_calc.py来了解它的保存位置。

到目前为止,我尝试了两种方法:

from os import path
saved_dir = path.join(path.dirname(__file__), 'results_dir')

from pkg_resources import resource_filename
filepath = resource_filename(__name__, 'results_dir') 

只给了我相对于包根的路径。

我需要做些什么来确保声明:

pickle.dump(my_data,open(os.path.join(full_path, 
                                      'results_dir', 
                                      'results.pkl'), 'wb')

是否会将pickle文件保存到results_dir

1 个答案:

答案 0 :(得分:0)

我不完全确定我的包中有结果目录是最好的主意,我要么:)

但是,如果要在subpackage2中的模块中放置类似下面的函数,它应该返回一个路径,包括(模块路径减去文件名,'results_dir',你传递函数作为参数的文件名):< / p>

def get_save_path(filename):
    import os
    return os.path.join(os.path.dirname(__file__), "results_dir", filename)
C:\Users\me\workspaces\workspace-oxygen\test36\TestPackage\results_dir\foo.ext