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

从Bash文件运行Python脚本会导致导入错误,python,linux,bash,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 '

我编写了一个简单的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'
然后一切都很好。没有导入错误或任何东西。就在我将其作为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文件使用相对路径,所以它不知道自定义模块的源在哪里。

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

本质上,您可以将cwd切换到包含游戏文件的目录,但可以利用pushd和popd来确保切换不会影响其他任何内容。重定向到/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

运行python3.4解释器和bash脚本时,cwd是否不同?
哪个python3.4
提供了
/usr/bin/python3.4
?目录似乎是问题所在。导入函数使用的是相对目录,而不是完整路径。当我运行python3.4 game.py时,我通常从它所在的目录中运行。尝试向脚本中添加一个隐式
cd/the/correct/directory
。@不可分割,这非常有效!谢谢我将把它写进我的Bash和安装程序脚本中。谢谢,这看起来也很好用。干杯
#!/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