我写了一个简单的 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'
Run Code Online (Sandbox Code Playgroud)
我检查了包含模块的文件夹的权限,它们可以访问。如果我只是在终端中运行 game.py 为:
python3.4 game.py
Run Code Online (Sandbox Code Playgroud)
然后一切正常。没有导入错误或任何东西。就在我将它作为 Bash 文件运行时。作为参考,这是我正在使用的 Bash 文件:
#!/bin/bash
STRING="Launching game..."
PYTHON="/usr/bin/python3.4"
GAME="/home/user/Projects/Test/game.py"
echo $STRING
$PYTHON "$GAME"
Run Code Online (Sandbox Code Playgroud)
编辑:关于 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |