【问题标题】:Executing python program执行python程序
【发布时间】:2012-05-14 17:16:23
【问题描述】:

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

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

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 吗? (据我了解,这只有助于导入模块)。

谢谢大家!

【问题讨论】:

  • 为什么要运行python3 script.py 而不是script.py

标签: python bash path executable


【解决方案1】:

当直接调用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

在尝试使用这些可执行文件之前,您应该检查它们是否存在于您的系统中。

【讨论】:

  • 谢谢!我有 #!/usr/bin/python3,所以这解决了我的问题!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    python3 $(type -P script.py)
    

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

    例如:

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

    【讨论】:

      【解决方案4】:

      为避免路径中出现重复条目​​,您可以这样做:

      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
      

      【讨论】:

      • 谢谢!这比我做的要优雅一点:)
      猜你喜欢
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多