编写 Python pip-able 包:如何访问包中的文件?
Writing Python pip-able package: How to access files in the package?
我正在尝试开发一个基于CEFpython技术的可视化包,所以该函数必须访问一个html文件。所以包的结构基本上是:
viz_tool
--> init.py
--> main.py
--> index.html
并且在main.py文件中,我定义了一个函数:
def view():
index_filepath = os.path.realpath("index.html")
print(index_filepath)
browser = cef.CreateBrowserSync(url='file://' + index_filepath,
window_title="viz tool")
....
目标是,安装这个包后,我可以做:
from viz_tool import view
view()
当然,目前 "index_filepath" 是我当前的工作目录,因此它无法找到 "index.html" 文件。
我应该如何更改代码才能访问 "index.html" 文件,该文件大概位于安装包的目录中?
非常感谢!如果我需要澄清任何事情,请告诉我
查看 pkg_resources
的文档。
它有一个名为 resource_filename
的方法,您可以使用它来获取任何内部模块的绝对路径。
from pkg_resources import resource_filename
from foo.bar import bazz # say bazz has template folder
pth_to_template = resource_filename(bazz.__name__, "template")
这将 return 到 <path to foo>/foo/bar/bazz/template
的绝对路径。
我强烈建议不要将 html 文件放在根文件夹中,并避免使用任何形式的硬编码路径,包括递归执行 os.path.join
以遍历多个级别。它使以后移动文件变得一团糟。
编辑:
要通过相对路径从同一模块访问资源,您可以这样做
pth = resource_filename(__name__, "templates/something.html")
编辑 2:。
您还必须将 package_data 中的所有非 python 文件添加为 ,以便 setup.py 将它们添加到分发包中。
我正在尝试开发一个基于CEFpython技术的可视化包,所以该函数必须访问一个html文件。所以包的结构基本上是:
viz_tool
--> init.py
--> main.py
--> index.html
并且在main.py文件中,我定义了一个函数:
def view():
index_filepath = os.path.realpath("index.html")
print(index_filepath)
browser = cef.CreateBrowserSync(url='file://' + index_filepath,
window_title="viz tool")
....
目标是,安装这个包后,我可以做:
from viz_tool import view
view()
当然,目前 "index_filepath" 是我当前的工作目录,因此它无法找到 "index.html" 文件。
我应该如何更改代码才能访问 "index.html" 文件,该文件大概位于安装包的目录中?
非常感谢!如果我需要澄清任何事情,请告诉我
查看 pkg_resources
的文档。
它有一个名为 resource_filename
的方法,您可以使用它来获取任何内部模块的绝对路径。
from pkg_resources import resource_filename
from foo.bar import bazz # say bazz has template folder
pth_to_template = resource_filename(bazz.__name__, "template")
这将 return 到 <path to foo>/foo/bar/bazz/template
的绝对路径。
我强烈建议不要将 html 文件放在根文件夹中,并避免使用任何形式的硬编码路径,包括递归执行 os.path.join
以遍历多个级别。它使以后移动文件变得一团糟。
编辑: 要通过相对路径从同一模块访问资源,您可以这样做
pth = resource_filename(__name__, "templates/something.html")
编辑 2:。
您还必须将 package_data 中的所有非 python 文件添加为