Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何从Applescript=>;运行Python(使用导入的模块);未找到模块错误_Python 3.x_Applescript - Fatal编程技术网

Python 3.x 如何从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 "/

如何从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_配置文件中的$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设置。