如何从 Applescript => 运行 Python(使用导入的模块)=> 找不到模块错误

How to Run Python (with imported modules) from Applescript => Module Not Found Errors

如何从 Applescript 运行 一个 python 脚本(带有导入的模块)?

从终端,这些脚本工作正常

python -m api.get_classrooms

python /absolute/path/to/project/api/get_classrooms.py

如果我 运行 来自 AppleScript 的终端脚本,我得到模块未找到错误:

set pythonPath to "/path/to/anaconda3/envs/jupyter/bin/python"
set scriptPath to "/absolute/path/to/project/api/get_classrooms.py"
set result to do shell script pythonPath & " " & scriptPath & " "

我收到错误

ModuleNotFoundError: No module named 'api'"

我确实将我的项目添加到 .bash_profile

中的 $PYTHONPATH
echo $PYTHONPATH => /path/to/project/a

并且 python 文件(由 AppleScript 调用)设置为可执行文件

Applescript 不知道 PYTHONPATH 吗?

任何朝着正确方向的推动都会受到赞赏。

AppleScript 的 do shell script 不导入典型交互式 shell 使用的环境。这包括 $PATH 变量,我怀疑这是你的专业人士的错误所在。您可以通过调用 Terminal 等应用程序使用的 path_helper 实用程序来强制它进行完整设置。试试 运行 这个代码:

set pythonPath to "/path/to/anaconda3/envs/jupyter/bin/python"
set scriptPath to "/absolute/path/to/project/api/get_classrooms.py"
set result to do shell script "eval `/usr/libexec/path_helper -s`; python -m api.get_classrooms"

感谢 ted wrigley :) 我终于能够让它工作了...
直接针对get_classrooms.py脚本。
相反,AppleScript 运行以下 shell 脚本(在项目的子目录 'bash' 中工作)。
bash 脚本执行 python 脚本。

这不是我想要的确切解决方案......但它有效......并且(可能)更优雅......至少在项目转换为带有 flask 的 webapp 之前是这样。

对于使用 applescript
定位 python 脚本有困难的任何人 applescript=>bash=>python

Applescript

do shell script "/Users/me/path/to/project/bash/applescript.sh"

Bash project/bash 目录中的脚本

#!/usr/bin/env bash
# eval /usr/libexec/path_helper -s; # didn't need
export PYTHONPATH='/Users/me/path/to/project';
/Users/me/anaconda3/envs/jupyter/bin/python -m api.get_classrooms