Как запустить Python (с импортированными модулями) из Applescript => Ошибки модуля не найдены - PullRequest
0 голосов
/ 07 февраля 2020

Как запустить скрипт python (с импортированными модулями) из Applescript?

Из терминала эти скрипты работают нормально

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'"

Я добавил свой проект в $ PYTHONPATH в .bash_profile

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

И для файла python (называемого AppleScript) задан исполняемый файл

Разве Applescript не знает о PYTHONPATH?

Любой pu sh в правильном направлении приветствуется.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Благодаря Теду Ригли :) Я наконец-то смог заставить его работать ... По не , нацеленным непосредственно на скрипт get_classrooms.py. Вместо этого AppleScript запускает приведенный ниже сценарий оболочки (работающий в подкаталоге проекта 'bash'. Сценарий bash выполняет сценарий python. Это было не точное решение, которое я хотел ... но оно работает ... и (возможно) более элегантно ... по крайней мере до тех пор, пока проект не преобразуется в веб-приложение с flask.

Для тех, у кого проблемы с таргетингом python скриптов с appleScript. яблочный скрипт => bash => python

Applescript

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

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
0 голосов
/ 07 февраля 2020

AppleScript do shell script не импортирует среду, используемую обычной интерактивной оболочкой. Это включает в себя переменную $ PATH, которая, как я подозреваю, находится там, где лежит ваша проблема. Вы можете заставить его выполнить полную настройку, вызвав утилиту path_helper, которую используют такие приложения, как Terminal. Попробуйте запустить этот код:

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...