【问题标题】:How do I fix python error occuring when script is run by an app? (macos)如何修复应用程序运行脚本时发生的python错误? (苹果系统)
【发布时间】:2022-01-12 11:46:05
【问题描述】:

我正在使用安装了几个 python 钩子的 taskwarrior,这些钩子在发出某些 taskwarrior 命令时会被触发。当我从命令行正常使用 taskwarrior 时,这些钩子运行良好。

但是当挂钩由热键应用程序 Karabiner Elements(我在 Mac 上)触发时,我遇到了问题。 Karabiner 调用一个 perl 脚本,该脚本依次执行这个包含 task 命令的 bash 命令:

/bin/bash -c 'TASKRC=/Users/me/.taskrc /usr/local/bin/task add \'the task\''

不幸的是,Karabiner 日志中的堆栈错误已被截断。这是我得到的一样多:

[2021-12-07 06:24:51.797] [error] [console_user_server] shell_command stderr:Traceback (most recent call last):   File "/Users/me/.task_work/hooks/on-add-pirate", line 9, in <module>     from tasklib import TaskWarrior, Task   File "/Users/me/Library/Python/3.8/lib/python/site-packages/tasklib/__init__.py", l...

我猜 python 脚本会窒息,因为它无法确定需要的库在哪里。但我没有看到任何我可以设置的 shell 环境变量。我用 brew 安装了 python3,用pip3 安装了tasklib 库(我相信)。

这是钩子脚本:

#!/usr/bin/env python3

import glob
from types import ModuleType
from importlib.machinery import SourceFileLoader, ModuleSpec
from importlib.util import module_from_spec
import os

from tasklib import TaskWarrior, Task

<-- snip -->

task = Task.from_input()

for hook in find_hooks('pirate_add'):
    hook(task)

print(task.export_data())

这是错误中提到的__init__.py 脚​​本:

from .backends import TaskWarrior
from .task import Task
from .serializing import local_zone

__version__ = '2.2.1'

【问题讨论】:

    标签: path shared-libraries


    【解决方案1】:

    好的,问题是 bash 默认使用旧版本的 python3。

    修复在这里:https://stackoverflow.com/a/70267561/1641112

    【讨论】:

      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2018-11-27
      • 2021-02-14
      • 2021-11-09
      • 2020-08-25
      • 2015-09-14
      相关资源
      最近更新 更多