0

我正在尝试开发一个基于 CEFpython 技术的可视化包,因此该函数必须访问一个 html 文件。所以包的结构基本上是:

viz_tool

-->初始化.py

--> main.py

--> 索引.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”文件,该文件可能位于安装包的目录中?

非常感谢你!如果我需要澄清任何事情,请告诉我

4

1 回答 1

1

看文档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")

这将返回的绝对路径<path to foo>/foo/bar/bazz/template

我强烈建议不要将 html 文件放在根文件夹中,并避免以任何形式使用硬编码路径,包括os.path.join递归地遍历多个级别。它使将来移动文件变得一团糟。

编辑:要通过相对路径从同一模块访问资源,您可以执行

pth = resource_filename(__name__, "templates/something.html")

编辑2:。您还必须像这里一样在 package_data 中添加所有非 python 文件,以便 setup.py 将它们添加到分发包中。

于 2020-05-15T19:57:44.333 回答