在制作并安装 tcl/tk 的 snap 包后,tcl 抱怨它在一系列库中找不到 init.tcl。这在 windows、python 和 tkinter 以及 virt 环境中已经多次被记录下来。但这是 Linux。从我目前收集到的信息来看,tcl 只需要我导出包含此文件的 tcl 和 tk 库路径。附注 - 该文件就在那里,并且在列出的大多数路径中。它只是不知道。
查看 snap 演示 https://developer.ubuntu.com/en/snappy/build-apps/your-first-snap/
我认为我需要创建一个脚本,设置库路径,然后启动 tcl 或 tk。与示例中使用的胶水非常相似。现在还处于早期阶段,文档还不够完善,但我认为我已经接近了。
我的问题:有人知道如何在 snap 中设置库路径吗?我的意思不是在终端中设置,因为那样只会在我的实际系统上设置路径,而不会为在计算机上使用此 snap 的任何人设置路径。如果需要回答这个问题,请告诉我。我正在工作,目前无法访问我的文件。
答案1
这是任何想要尝试的人的解决方案。Tcl 抱怨找不到init.tcl
并且希望甚至没有启动。我尝试了各种方法来导出文件所在的路径,但没有成功。我注意到在生成 snap 包时,会为每个暴露的二进制文件生成一个包装器。在这个包中,我创建了 2 个二进制文件 -tclsh
和wish
。导出失败后,我将包装器文件复制到snapcraft.yaml
文件所在的位置,因为清理系统会杀死所有以前生成的文件。我在每个包装器中添加了以下内容
export TCL_LIBRARY=$SNAP/usr/share/tcltk/tcl8.6:$TCL_LIBRARY:$TK_LIBRARY export TK_LIBRARY=$SNAP/usr/share/tcltk/tk8.6:$TK_LIBRARY:$TCL_LIBRARY
然后我编辑了该apps:
部分以反映包装器的使用,而不是直接二进制调用。
apps: tclsh: command: tclsh.wrapper #used to be just tclsh without the benefit of a wrapper with exports in it plugs: [home, unity7, network, x11] wish: command: wish.wrapper # same as above plugs: [home, unity7, network, x11]
最后在我的glue
部分我包含了这些包装器
glue:
plugin: copy files: tclsh.wrapper: usr/bin/tclsh.wrapper wish.wrapper: usr/bin/wish.wrapper
制作了 snap 包并安装。 两者都按预期tclsh
工作wish
,没有任何抱怨。
的执行命令tclsh
是tcl.tclsh
,并且wish
是tcl.wish
。