执行python程序

时间:2012-05-05 10:40:33

标签: python bash path executable

我已经在网上搜索了一段时间的答案,但这让我很头疼:

我正在使用Ubuntu 12.04,我想从终端执行Python脚本而不使用完整路径。 所以我将/ home / kyril / python / scripts /添加到PATH变量中,将以下内容放入./bashrc:

kyrilpathvariable="/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/kyril/Python/scripts/:/home/kyril/Bash/scripts"

if [ "$kyrilpathvariable" = "$PATH" ]; then
    echo PATH already exported

else

PATH=$PATH:/home/kyril/Python/scripts/
PATH=$PATH:/home/kyril/Bash/scripts/
export PATH

fi

(我知道if子句不是必需的,但如果我输入exec bash,我不想在我的PATH中有两次。)

现在的问题是:这完全适用于我的Bash脚本,所以在通过chmod使它们可执行后,我只需输入$ script.sh即可执行。但是,如果我输入$ python3 script.py,则会引发以下错误:python3: can't open file 'script.py': [Errno 2] No such file or directory

如果我输入脚本的完整路径,它就可以工作。有谁知道我做错了什么?我是否必须将目录添加到PYTHONPATH? (据我所知,这只对导入模块有帮助。)

谢谢你们!

4 个答案:

答案 0 :(得分:5)

当直接调用python3时,python会运行您告诉它的脚本文件,而不使用$PATH来查找它。 PYTHONPATH无关紧要 - 用于搜索Python模块。

我猜你在自己运行script.py时遇到了错误的解释器问题。我不知道你的脚本的第一行是什么,但它应该是这样的:

#!/usr/bin/env python3

或者如果您需要更精细的控制:

#!/usr/bin/env python3.2

对于Python 2脚本:

#!/usr/bin/env python2

或者:

#!/usr/bin/env python2.7

在尝试使用这些可执行文件之前,应检查这些可执行文件是否存在。

答案 1 :(得分:0)

我猜想当python搜索输入文件时会忽略路径变量。 Python开始在当前目录中搜索“script.py”,不知道是否为该文件声明了路径变量,因此无法找到它。

不幸的是,我不确定如何解决它,但也许更有经验的变量可以启发我们?

答案 2 :(得分:0)

python3 $(type -P script.py)

告诉Bash在PATH中查找可执行文件并提供其位置和名称。

例如:

$ type -P script.py
/usr/local/bin/script.py

答案 3 :(得分:0)

为避免路径中出现重复条目​​,您可以执行以下操作:

for dir in Python Bash; do
  dir_to_add="$HOME/$dir/scripts"
  case ":$PATH:" in
    *:"$dir_to_add":*) ;; # path already contains dir, do nothing
    *) PATH+=":$dir_to_add" ;;
  esac
done