Как использовать стандартный путь Python при запуске скриптов Python из макросов xcode

Я пытаюсь запустить сценарии Python с помощью меню пользовательских сценариев Xcode.

Проблема, с которой я столкнулся, заключается в том, что мой обычный os.sys.path (взятый из ~ / .profile), похоже, не импортируется при запуске сценариев из XCode, как при запуске их в Терминале (или с IPython). Все, что я получаю, - это путь по умолчанию, а это значит, что я не могу делать такие вещи, как

#!/usr/bin/python
import myScript

myScript.foo()

Где myScript - это модуль в папке, которую я добавил в свой путь.

Я могу достаточно легко добавить определенный путь к os.sys.path вручную, но я должен делать это в каждом отдельном скрипте для каждого пути, по которому я хочу использовать модули из

Есть ли способ настроить это так, чтобы он использовал тот же путь, который я использую везде?

Обновлено: после более подробного изучения вещей кажется, что сценарии, выполняемые из Xcode, используют совершенно другой ПУТЬ, чем обычно. Путь, который я получаю при запуске скрипта в Xcode:

PATH=/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin

и я уверен, что в моем обычном пути нет / Developer / usr / bin. Кто-нибудь знает, откуда идет этот путь?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
8 722
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Быстрый, но хитрый способ - создать сценарий-оболочку для python.

cat > $HOME/bin/mypython << EOF
#!/usr/bin/python
import os
os.path = ['/list/of/paths/you/want']
EOF

а затем запустите все свои скрипты XCode с

#!/Users/you/bin/mypython

Просто добавьте пути в sys, path.

>>> import sys
>>> sys.path
['', ... lots of stuff deleted....]
>>> for i in sys.path:
...     print i
... 

/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
>>> sys.path.append("/Users/crm/lib")
>>> for i in sys.path:
...     print i
... 

/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python25.zip
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-darwin
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/plat-mac/lib-scriptpackages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk
/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload
/Library/Python/2.5/site-packages
/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjC
/Users/crm/lib
>>> 

Что ж, это то, что я делал, но я не знаю никакого способа сохранить мои изменения за пределами этого единственного скрипта (поскольку установка PYTHONPATH не имеет никакого эффекта в этой ситуации). Вы знаете, что мне не хватает?

Lawrence Johnston 13.12.2008 07:03

Простите меня, если мой ответ кажется невежественным, я не совсем знаком с Mac и, возможно, неправильно понял ваш вопрос.

В Windows и Linux, когда я хочу сослаться на написанный мной сценарий, я устанавливаю переменную среды PYTHONPATH. Это то, из чего os.sys.path получает свои значения, если я правильно помню.

Допустим, myScript.py находится в / Somewhere. Установите PYTHONPATH на:

PYTHONPATH = /Somewhere

Теперь у вас должна быть возможность «импортировать myScript».

Если вы начинаете создавать подпапки как пакеты python, изучите использование файлов в этом.py в каждой папке.

Если вы планируете все время повторно использовать этот и другие скрипты, вам следует оставить PYTHONPATH установленным в качестве переменной среды.

Вот и все, обычное место для установки стороны Mac PYTHONPATH находится в ~ / .profile, что я и сделал. Это работает правильно при использовании интерпретаторов python или IPython или при запуске исполняемого сценария python из средства поиска. Проблемы возникают только при попытке запустить их изнутри Xcode.

Lawrence Johnston 13.12.2008 07:01

Когда я разрабатываю приложения Python в PyDev в Eclipse, PyDev удаляет из PYTHONPATH вещи, которых нет в пакетах сайтов. Итак, чтобы сослаться на эти сценарии, я должен указать, на какие «проекты» я ссылаюсь, или, в данном случае, путь к вашим сценариям. Возможно, XCode также имеет эту настройку / функцию?

user44484 13.12.2008 07:06
Ответ принят как подходящий

На Mac переменные среды в вашем .profile не видны приложениям за пределами терминала.

Если вы хотите, чтобы переменная среды (например, PATH, PYTHONPATH и т. д.) Была доступна для приложений xcode, вы должны добавить ее в новый файл plist, который вы создаете в ~ / .MacOSX / environment.plist.

Дополнительную информацию см. В документе EnvironmentVars на веб-сайте разработчика Apple.

Я еще не пробовал это сделать, но это первый метод, который я попробую в будущих скриптах.

Lawrence Johnston 21.02.2012 01:00

Я обычно использую файлы pth. Из документации.

The most convenient way is to add a path configuration file to a directory that’s already on Python’s path, usually to the .../site-packages/ directory. Path configuration files have an extension of .pth, and each line must contain a single path that will be appended to sys.path. (Because the new paths are appended to sys.path, modules in the added directories will not override standard modules. This means you can’t use this mechanism for installing fixed versions of standard modules.)

Поэтому проще всего сделать следующее:

echo "/some/path/I/want/to/add" > /Library/Python/2.5/site-packages/custom.pth

HTH

Не уверен, считается ли Xcode запуском скрипта через Finder или нет, но если это так, очевидно, Finder не читает файлы .profile или .cshrc при запуске для пользователя, как это делает Терминал.

Если на ваш вопрос все еще нет ответа, ознакомьтесь с базой знаний Apple: QA1067 и настройте свою среду с помощью plist.

Другие вопросы по теме