【问题标题】:script is on PATH, yet python3 script fails: no such file or directory脚本在 PATH 上,但 python3 脚本失败:没有这样的文件或目录
【发布时间】:2021-06-15 20:05:49
【问题描述】:
dag@Arokh:~$ source /home/dag/.bashrc
dag@Arokh:~$ echo $PATH
/home/dag/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
dag@Arokh:~$ python3 /home/dag/.local/bin/facemorpher --version
Face Morpher 1.0
dag@Arokh:~$ python3 facemorpher --version
python3: can't open file 'facemorpher': [Errno 2] No such file or directory

将目录添加到PATH 似乎没有帮助。如何让python3 facemorpher 从任何目录工作?

【问题讨论】:

  • 我猜你的应该是stackoverflow.com/questions/55840939/… 的副本,但它没有一个赞成的答案。长话短说,当你想运行的脚本应该只用命令facemorpher运行时,不要输入python3 facemorpher
  • 啊,确实,facemorpher --version 执行了。谢谢您的帮助!那么,我应该删除问题,还是保持原样?
  • 在没有完整路径的情况下重新打开问题并添加省略“python3”的解决方案似乎会有所帮助 - 这是有用的信息,除非您已经知道,否则很难找到答案。特别是因为在线示例使用“python”执行它。您指出的副本具有非常特定于情况的标题和描述,并且没有说明如何在没有路径的情况下运行脚本。此外,这不是它标记为 atm 的副本。

标签: python python-3.x linux command-line path


【解决方案1】:

python3 在查找脚本时不注意 PATH 变量。此变量控制 shell 查找可执行文件的位置。

那么现在应该做什么,只要脚本具有可执行权限和像#!/usr/bin/env python3这样的有效shebang作为它的第一行,就是这样

facemorpher

前面没有python3 应该运行脚本。也许这正是您想要和需要的。

没有任何选项的python3 命令需要一个文件名参数;没有简单的方法让它查找指定目录中不存在的文件(如果文件名没有明确的目录部分,则为当前工作目录;这是操作系统解析相对文件名的方式,并且可能不应该被单个命令弄乱)。有关这方面的更多详细信息,请参阅Difference between ./ and ~/

作为记录,chmod a+x path/to/scriptname 为系统上的所有用户添加了脚本的执行权限,并且#! 之后的 shebang 中的路径应该指向您的 Python 解释器的完整路径,或者指向类似实用程序的完整路径env 在您的 PATH 上找到它并仅根据命令名称执行它(此处为 python3;但在某些系统上,Python 解释器可执行文件的文件名只是 python,或者更广泛地说,无论系统的名称是什么所有者决定为其命名)。

【讨论】:

  • 如果这解决了您的问题,请考虑投票和/或接受它。如果您愿意,欢迎您发布自己的答案并接受。接受答案通过将您的问题标记为已解决来帮助未来的访问者。另见help.
猜你喜欢
  • 2020-02-12
  • 2017-06-16
  • 2016-01-11
  • 2018-08-24
  • 2020-05-09
  • 2017-08-06
  • 1970-01-01
  • 2013-11-14
相关资源
最近更新 更多