CherryPy配置tools.staticdir.root问题

3 投票
1 回答
2631 浏览
提问于 2025-04-15 23:26

我该如何让我的静态文件根目录相对于我的应用程序根文件夹,而不是使用硬编码的路径呢?

根据CP的说明(http://www.cherrypy.org/wiki/StaticContent),我在我的配置文件中尝试了以下内容:

tree.cpapp = cherrypy.Application(cpapp.Root())
tools.staticdir.root = cpapp.current_dir

但是当我运行 cherrpy.quickstart(rootclass, script_name='/', config=config_file) 时,出现了以下错误:

builtins.ValueError: ("配置错误在部分: 'global', 选项: 'tree.cpapp', 值: 'cherrypy.Application(cpapp.Root())'. 配置值必须是有效的Python。", 'TypeError', ("unrepr无法解析名称'cpapp'",))

我知道我可以在调用quickstart之前在main.py文件中进行配置(例如,使用os.path.abspath(os.path.dirname(file))),但如果可能的话,我更喜欢使用单独的配置文件。

任何帮助都将不胜感激(如果相关的话,我正在使用CP 3.2和Python 3.1)

谢谢大家,

Alan

1 个回答

2

当你在配置中提到一个模块时,CherryPy 首先会在 sys.modules 中查找这个模块。所以一个解决办法是在调用 quickstart 之前先 import cpapp

但是如果在 sys.modules 中找不到这个模块,CherryPy 会尝试用 __import__ 来导入它。既然这也失败了,你可能需要检查一下你的 cpapp.py 模块是否真的可以被导入。

想了解更多细节,可以查看 lib/reprconf.py 模块。

撰写回答