Как мне использовать мой стандартный путь Python при запуске сценариев Python из макросов XCode - PullRequest
3 голосов
/ 13 декабря 2008

Я пытаюсь запустить скрипты 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. Кто-нибудь знает, откуда идет этот путь?

Ответы [ 6 ]

5 голосов
/ 13 декабря 2008

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

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

См. Документ EnvironmentVars на веб-сайте Apple для разработчиков.

1 голос
/ 06 ноября 2009

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

Самый удобный способ - добавить файл конфигурации пути к каталогу это уже на пути Python, как правило, ... / сайт-пакеты / каталог. Конфигурационные файлы пути имеют расширение .pth, и каждый строка должна содержать один путь, который будет добавлен в sys.path. (Так как новые пути добавлены к sys.path, модули в добавленном каталоги не будут переопределять стандартные модули. Это означает, что вы не можете использовать это механизм установки фиксированный версии стандартных модулей.)

Итак, самое простое, что нужно сделать, это сделать следующее:

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

НТН

1 голос
/ 13 декабря 2008

Просто добавьте пути к 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
>>> 
1 голос
/ 13 декабря 2008

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

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

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

#!/Users/you/bin/mypython
0 голосов
/ 08 ноября 2011

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

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

0 голосов
/ 13 декабря 2008

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

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

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

PYTHONPATH = /Somewhere

Теперь вы сможете "импортировать myScript".

Если вы начинаете делать подпапки в виде пакетов Python, обратите внимание на использование init .py файлов в каждой папке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...