从Bash文件运行Python脚本导致导入错误

我写了一个简单的bash脚本来运行我在Python中制作的游戏。 但是,当我这样做时,尝试导入自定义模块时会给我一个导入错误。

Traceback (most recent call last): File "/home/user/Projects/Test/game.py", line 7, in <module> import boot, splash, menu, game, player, options ImportError: No module named 'boot' 

我检查了包含模块的文件夹的权限,他们是可访问的。 如果我只是在terminal中运行game.py,如下所示:

 python3.4 game.py 

那么一切都很好。 没有导入错误或任何东西。 就在我运行它作为Bash文件。 作为参考,这里是我正在使用的Bash文件:

 #!/bin/bash STRING="Launching game..." PYTHON="/usr/bin/python3.4" GAME="/home/user/Projects/Test/game.py" echo $STRING $PYTHON "$GAME" 

编辑:它似乎是一个绝对/相对path的问题,在哪里Bash文件和Python文件。 运行Bash文件,因为Python文件正在使用相对path,所以它不知道自定义模块的来源在哪里。

如果你关心的是相对路径和绝对路径(这听起来可能是这里的潜在原因),我建议你做一些类似于我下面的代码,以确保你在bash脚本中也使用相对路径。

从本质上讲,你将cwd切换到包含游戏文件的目录,但是利用pushdpopd来确保交换机不会影响其他任何东西。 重定向到/ dev / null是为了抑制来自pushd / popd的输出,这通常是脚本情况下额外的噪声。

 #!/bin/bash STRING="Launching game..." PYTHON="/usr/bin/python3.4" GAME_ROOT="/home/user/Projects/Test" GAME="game.py" pushd . > /dev/null 2>&1 cd $GAME_ROOT echo $STRING $PYTHON "$GAME" popd > /dev/null 2>&1