【问题标题】:Running python script from terminal on MacOS requires在 MacOS 上从终端运行 python 脚本需要
【发布时间】:2020-09-08 10:08:08
【问题描述】:

我有一个带有一些功能的 cli,我使用以下方法将其复制到 /local/bin

sudo ln -s ~/code/project/scripts/sl /usr/local/bin/sl

如果我激活虚拟环境并执行sl command_name service,它会按预期工作。

但如果尝试从终端运行它,我会得到:

user@MacBook-Pro-USER ~ % sl command_name service
Traceback (most recent call last):
  File "/usr/local/bin/sl", line 4, in <module>
    from sl_commands.sl import execute
  File "/Users/user/code/project/scripts/sl_commands/sl.py", line 1, in <module>
    import argh
ImportError: No module named argh

运行 pip3 install argh 会导致:

user@MacBook-Pro-USER ~ % pip3 install argh
Requirement already satisfied: argh in /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (0.26.2)

如果我在 ubuntu 上尝试相同的操作,脚本会正确执行。如何在不激活 virtualenv 的情况下使其在 MacOS 上运行?

【问题讨论】:

  • 看起来脚本不同意 pip3 使用哪个 Python 库。你设置PYTHONPATH吗?脚本的 shebang 是什么,如果这不是绝对路径,它会解决什么问题?您可以从脚本中转储 sys.path 的值作为回溯的一部分吗?
  • @tripleee 这是shebang。我把它作为#! /usr/bin/env python,但它需要python3 for MacOS

标签: python macos shell


【解决方案1】:

shebang 必须是 #! /usr/bin/env python3 而不是 python。由于 python2 在 MacOS 上是“python”

【讨论】:

  • 我认为与其改变shebang,不如在/usr/local/bin/下创建符号链接python 2 python3$ln -s /usr/local/bin/python3 /usr/local/bin/python并设置PATH变量,$export PATH=/usr/local/bin:$PATH