首页 > 解决方案 > 为什么通过 bash 脚本打开的 xterm 终端找不到漂亮的模块?

问题描述

我有一个使用漂亮表的 python 文件。我还有一个 bash 脚本,可以使用 xQuartz 打开并运行它。当我打开 xQuartz 并从那里运行文件时,它按预期工作,但是当我尝试使用脚本运行它时,它无法找到我的漂亮模块。可能会发生什么?

bash 脚本行:

xterm -geometry 55x24+000+000 -hold -e /bin/bash -l -c "python3 server.py 1"

python3 server.py 1在 xQuartz 终端上运行很好。如果我xterm从 mac 终端运行并执行相同操作,它也可以工作。

标签: pythonbashxquartz

解决方案


正如@DiegoTorresMilano 所指出的,您可能正在运行不同版本的python 3,具体取决于您的~/.bash_profile~/.bashrc. 如果您安装了多个版本的 python 3,这是可能的。

当您运行交互式非登录 bash 会话时,您~/.bash_profile将首先获得来源,然后是您的~/.bashrc. 由于您~/.bashrc将获得第二个来源,因此它可以覆盖您在~/.bash_profile.

当您使用该-l选项运行 bash 时,这会告诉 bash 像登录 shell 一样运行。然后bash 手册页的“调用”部分告诉我们,~/.bash_profile它将由登录 shell 获取,但不是 ~/.bashrc.

您应该尝试python3 --version在交互式 xQuartz 终端中运行。这将为您提供类似的输出Python x.y.z(例如,Python 3.8.5)。然后,您可以通过pythonx.y在 bash 脚本中使用来运行该特定的 python 版本(例如,如果您的输出python3 --versionwas Python 3.8.5,您应该python3.8在 bash 脚本中使用)。


推荐阅读