如何设置一个嵌入了 FreeCAD 库的 Python 虚拟环境,以便能够作为模块导入脚本?
在使用使用 FreeCAD 库创建和修改 3D 几何图形的 Python 脚本时,我想避免使用 FreeCAD GUI 以及依赖于在系统上安装 FreeCAD。我希望 Python 虚拟环境可以做到这一点。
我在 Debian 10 的 virtualenv 中使用 Python 3.8 在 PyCharm 2021.1.1 中工作。
我开始使用 FreeCAD 文档作为嵌入脚本的基础:
https://wiki.freecadweb.org/Embedding_FreeCAD
在一次尝试中,我从 Debian 下载并解压了 .deb 包,注意获取每个依赖项所需的正确版本。在另一次尝试中,我复制了 FreeCAD flatpak 安装的内容,因为它应该包含 FreeCAD 依赖的所有库。
将要导入的库放置在虚拟机加工文件夹中后,我在各种尝试中使用 sys.path.append() 以及 PyCharm 的项目结构工具指向它们。在这两种情况下,虚拟环境都会检测到 FreeCAD.so 所在的位置,但无法找到其任何依赖项,即使位于同一文件夹中也是如此。显式导入这些依赖项时,它们中的每一个都有相同的问题。当导入失败时,这会导致死胡同,因为它没有根据 Python 定义模块导出函数:
ImportError: dynamic module does not define module export function (PyInit_libnghttp2)
我似乎正在查看一个很长的损坏依赖链,即使我使所需的库可用并通知 Python 它们所在的位置。
我将不胜感激有关如何执行此操作的直接说明或指向描述在 Python 虚拟环境中导入 FreeCAD 库的文档的指针,因为我还没有遇到任何具体的内容。
我遇到了一些先前的问题,这些问题似乎具有相似的意图,但没有答案:
是否可以在 python 程序中嵌入 Blender/Freecad?
Conda 的类似问题集中在从主机系统导入库而不是将它们嵌入到虚拟环境中:
仅在一个 conda 虚拟环境的系统路径中包含 FreeCAD
其他人在 FreeCAD 论坛上的问题没有得到解答:
https://forum.freecadweb.org/viewtopic.php?t=27929
编辑:
弄清楚这一点是一次很棒的学习经历。将依赖项拼凑在一起的问题在于,要实现这种方法,从 FreeCAD 及其依赖项到 Python 解释器及其依赖项的所有内容似乎都需要构建在它们所依赖的相同版本的库上,以避免导致分段使一切都陷入崩溃的故障。这意味着从 Flatpak 安装中获取它所依赖的 FreeCAD 模块和库的想法在理论上并不可怕,因为所有部件都是使用相同的库版本构建在一起的。我只是无法解决问题,大概是由于包含的库的位置以及难以识别包含的 Python 解释器的可执行文件。最后,我查看了 FreeCAD AppImage 的内容,