Я пытаюсь запустить сценарии 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.
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
>>>
Простите меня, если мой ответ кажется невежественным, я не совсем знаком с Mac и, возможно, неправильно понял ваш вопрос.
В Windows и Linux, когда я хочу сослаться на написанный мной сценарий, я устанавливаю переменную среды PYTHONPATH. Это то, из чего os.sys.path получает свои значения, если я правильно помню.
Допустим, myScript.py находится в / Somewhere. Установите PYTHONPATH на:
PYTHONPATH = /Somewhere
Теперь у вас должна быть возможность «импортировать myScript».
Если вы начинаете создавать подпапки как пакеты python, изучите использование файлов в этом.py в каждой папке.
Если вы планируете все время повторно использовать этот и другие скрипты, вам следует оставить PYTHONPATH установленным в качестве переменной среды.
Вот и все, обычное место для установки стороны Mac PYTHONPATH находится в ~ / .profile, что я и сделал. Это работает правильно при использовании интерпретаторов python или IPython или при запуске исполняемого сценария python из средства поиска. Проблемы возникают только при попытке запустить их изнутри Xcode.
Когда я разрабатываю приложения Python в PyDev в Eclipse, PyDev удаляет из PYTHONPATH вещи, которых нет в пакетах сайтов. Итак, чтобы сослаться на эти сценарии, я должен указать, на какие «проекты» я ссылаюсь, или, в данном случае, путь к вашим сценариям. Возможно, XCode также имеет эту настройку / функцию?
На Mac переменные среды в вашем .profile не видны приложениям за пределами терминала.
Если вы хотите, чтобы переменная среды (например, PATH, PYTHONPATH и т. д.) Была доступна для приложений xcode, вы должны добавить ее в новый файл plist, который вы создаете в ~ / .MacOSX / environment.plist.
Дополнительную информацию см. В документе EnvironmentVars на веб-сайте разработчика Apple.
Я еще не пробовал это сделать, но это первый метод, который я попробую в будущих скриптах.
Я обычно использую файлы 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.
Что ж, это то, что я делал, но я не знаю никакого способа сохранить мои изменения за пределами этого единственного скрипта (поскольку установка PYTHONPATH не имеет никакого эффекта в этой ситуации). Вы знаете, что мне не хватает?