docassemble - 在 docassemble 中编写辅助函数/代码/采访,直接到数据目录(即绕过操场)?
问题描述
在对这个问题的回答中,建议高级用户可能喜欢直接开发包,而不是在操场上开发然后创建单独的包——具体来说,这个想法是创建跨包帮助函数而不必打包/重新打包, ETC。
这里有几个问题。其中一些非常“开箱即用”,所以我很高兴自己进行实验/研究,但只是想问问是否有任何已知的问题/想法/最佳实践。
- 这是要查看该建议的正确目录吗:
/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/[[package-name]]/data
? - 该目录有什么魔力,或者我可以
.../site-packages/docassemble/helpers
用于开发辅助功能/交叉使用面试的东西,然后根据需要导入.../data
? - 文档中某处是否有 docassemble 文件结构的列表(即当您运行容器时)?文档中有各种对 (eg.)
/usr/share/docassemble/config/
、.../docassemble/backup
等的引用,但我没有找到整个文件系统或 docassemble 层的文件系统的任何内容(alpine
例如,显然不需要布局)。 - 查看文档的“Anatomy of a docassemble package”页面以及“Modules folder”页面,我认为用于导入
.yml
文件的 CWD 是.../data
? - 如果那是正确的,那么如果我要创建一个
/usr/share/docassemble/local3.8/lib/python3.8/site-packages/docassemble/helpers/helper.py
目录和文件,那么我可以使用类似下面的东西来导入helper.py
一个虚构的interview.yml
文件吗?并不是说那将是最好的主意,而只是询问尝试更多地了解 docassemble 是否可行……还没有完全考虑过这样的工作流程(即,如果只使用可能会更好把东西打包的操场,或者如果有另一个更简单的选择)。
---
modules:
- .....helpers.helper
---
- 大概然后我也可以在文档的其他地方接受建议,并通过将包中的代码放在
docassemble/packagename/data/
文件夹中并像这样导入来抽象出包中的代码:
---
modules:
- .module
---
我想我什至可以像这样构造我的文件.../data/modules/module.py
,然后用类似下面的东西导入?
---
modules:
- .modules.module
---
很高兴做我自己的实验/研究,但只是想问问是否有任何已知的问题/想法浮现在脑海中。
解决方案
Dockerfile
运行python3.8 -m venv --copies /usr/share/docassemble/local3.8
。_ 当需要升级到 Python 3.9 时,它会做python3.9 -m venv --copies /usr/share/docassemble/local3.9
. 如何在该虚拟环境中安装包取决于 Python 和pip
.- 该目录
site-packages/docassemble/helpers
将是 Python 包的目录docassemble.helpers
。您可以编写这样的包并将其发布在 PyPI 上(名称尚未使用)。 - 您可以查看安装页面和/或Dockerfile。
- 当您在 Python 包中引用数据文件时,您可以使用完全限定的引用,例如
docassemble.familylaw:data/questions/kids.yml
. 如果你写data/static/tweaks.css
它会假设你的意思是当前包中的一个文件。如果您只是给它一个文件名(例如,tweaks.css
),它将假定您指的是当前包中的文件,并且它将根据上下文对您所指的数据文件夹做出假设。如果您的 Python 包名为docassemble.familylaw
,则数据文件夹位于包docassemble/familylaw/data
内docassemble.familylaw
。 - 您可以创建一个 Python 包
docassemble.helpers
并安装它,但不建议通过将文件直接写入 Python 虚拟环境来绕过 docassemble 的包安装系统。请注意,docassemble 是一个云应用程序,因此 docassemble“服务器”可能是一组机器。包管理系统确保您可以执行docker stop
、docker rm
、docker pull
和docker run
,并且您的服务器将使用所有正确的 Python 包重新启动并运行,即使docker pull
导致从 Python 3.8 升级到 Python 3.9 也是如此。 - 该块与文件夹
modules
无关。data
如果docassemble.xyz
在块中列出modules
,则 docassemble 运行from docassemble.xyz import *
并将模块的导出名称导入面试答案命名空间。
推荐阅读
- sql - 根据日历表中的下一个工作日选择
- java - 当我有太多布局时,我应该使用 findbyTag() 吗?
- excel - 如何更改 Excel VBA 中命名范围的第 n 个值?
- java - Javafx 音乐播放器不工作
- xml - 仅使用 x,y 坐标和形状区域 (2D) 检查形状是否在另一个形状的范围内
- node.js - 使用 nodejs 和 mongodb 调用 REST API
- python - 在python中使用正则表达式拆分字符串
- jmeter - 如何在整个测试运行中均匀分布 JMeter 线程
- c# - System.Windows.Forms - RemoteWebDriver -> 访问被拒绝
- html - 如何制作一个顶部有选择的信息框?