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

时间:2014-07-13 22:45:26

标签: python linux bash

我写了一个简单的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'

我检查了包含模块的文件夹的权限,并且可以访问它们。如果我只是在终端中运行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"

编辑:关于Bash文件和Python文件的位置似乎是绝对/相对路径问题。运行Bash文件,因为Python文件使用相对路径,因此它不知道自定义模块的来源在哪里。

1 个答案:

答案 0 :(得分:2)

如果您担心相对绝对路径(听起来这可能是潜在原因),我建议您执行以下代码:确保您也在 bash 脚本中使用相对路径。

基本上,您将 cwd 切换到包含游戏文件的目录,但是利用 pushd popd 来确保交换机不会&# 39;影响其他任何事情。重定向到 / 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