Python 3.x 如何从Applescript=>;运行Python(使用导入的模块);未找到模块错误
如何从Applescript运行python脚本(带有导入的模块) 从终端,这些脚本工作正常Python 3.x 如何从Applescript=>;运行Python(使用导入的模块);未找到模块错误,python-3.x,applescript,Python 3.x,Applescript,如何从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 "/
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_配置文件中的$PYTHONPATH中
echo $PYTHONPATH => /path/to/project/a
python文件(由AppleScript调用)设置为可执行
Applescript不知道PYTHONPATH吗
任何朝正确方向的推动都是值得赞赏的。AppleScript的
do shell脚本
不会导入典型交互式shell所使用的环境。这包括$PATH变量,我怀疑这就是您的pro所在。您可以通过调用终端等应用程序使用的path\u 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"
感谢:)我终于能够让它工作了…通过not直接以get_.py脚本为目标。
相反,AppleScript运行下面的shell脚本(在项目的子目录“bash”中工作)。
bash脚本执行python脚本。
这不是我想要的确切解决方案……但它工作……并且(可能)更优雅……至少在项目转换为带有flask的webapp之前。
对于那些在使用applescript
applescript=>bash=>python定位python脚本时遇到困难的人 苹果书
do shell script "/Users/me/path/to/project/bash/applescript.sh"
project/Bash目录中的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
我仍然在上面的脚本中发现模块未找到错误。唯一有效的方法是将脚本移动到项目的根目录中…不在项目的api目录中。您知道这是什么原因吗?谢谢:)我对python不是很精通(至少,不像我对AppleScript那么精通)所以我没有一个好主意。但我会进一步研究。@grahama:出于好奇,当您在终端中运行
echo$PYTHONPATH
时,会得到什么输出?使用echo$PYTHONPATH,我会得到正确的路径=>/Users/me/path/to/project/dir。也就是说,我正在为这个项目运行一个conda虚拟环境。在终端脚本中,在执行python脚本之前,我将尝试运行“source activate my_environment”。也许这会奏效……是的,我认为这就是问题所在:$PYTHONPATH
在使用do shell脚本时未设置。但是请记住,每个do shell脚本都是不同的shell实例。您必须将命令链接到一个dss中,或者在每次使用dss时激活环境。如前所述,在使用do shell script
时,您不应依赖于特定的环境,因为它不会读取在终端中运行的交互式shell所需的配置文件。如果需要一个特定的环境,您需要在shell中设置它。@red\u meanse您可以详细介绍如何在shell中为此正确设置环境吗?如果我使用的是zsh
我是否应该在.zshrc
中放入一些内容?或者在调用AppleScript之前在Automator中运行Shell脚本?我希望正确地执行此操作,以便服务不会在每次运行时导入模块。每个do shell脚本都是一个新环境,因此您需要每次设置它并执行该语句中的所有操作。您可以使用source
之类的工具重新加载zsh设置。