У IDLE и Python разные пути в Mac OS X - PullRequest
2 голосов
/ 19 сентября 2009

Я использую Mac OS X 10.5.8. Я установил Python 2.6 с сайта. Это в моем каталоге приложений. Я отредактировал мой .bash_profile, чтобы иметь:

# Setting PATH for MacPython 2.6
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:${PATH}"
export PATH
export PATH=/usr/local/mysql/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
export PYTHONPATH=/Users/blwatson/pythonpath:/Users/blwatson/pythonpath/django/bin:$PYTHONPATH

когда я запускаю python из командной строки, я могу получить следующее:

Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 0, 4, 'alpha', 0)

проверка пути

>>> import sys
>>> sys.path
['', '/Users/blwatson/pythonpath', '/Users/blwatson/pythonpath/django/bin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/wx-2.8-mac-unicode']
>>> 

Когда я нахожусь в бездействии, я получаю другой опыт.

Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39) 
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************

IDLE 2.6.2      
>>> import django

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import django
ImportError: No module named django
>>> import sys
>>> print sys.path
['/Users/blwatson/Documents', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL', '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/wx-2.8-mac-unicode']

Понятия не имею, что происходит. Я перешел с одного ноутбука на другой и выполнил всю работу с TimeCapsule, так что я знаю, что из-за этого есть некоторый конфликт. Откуда IDLE получает PATH? Почему я не могу импортировать Django?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2009

Как и во всех пакетах приложений OS X, если вы запускаете IDLE.app двойным щелчком, оболочка не включается и, следовательно, bash_profile или другие файлы инициализации оболочки не запускаются. Есть способ установить переменные среды сеанса пользователя с помощью специального файла списка свойств (~/.MacOSX/environment.plist), но на самом деле это немного не так и не рекомендуется.

К счастью, существует более простое решение: в OS X также возможно вызвать IDLE из командной строки оболочки в окне терминала. Таким образом, он будет наследовать экспортированные переменные среды из этой оболочки, как и следовало ожидать. Так что-то вроде:

$ export PYTHONPATH= ...
$ /usr/local/bin/idle2.6

Существовали различные несоответствия и проблемы с IDLE в OS X до версии 2.6.2 в зависимости от того, как он вызывался, поэтому я рекомендую использовать не более старые версии python.org 2.6.2 или 3.1 для OS X.

РЕДАКТИРОВАТЬ: из справочной страницы open(1) я вижу, что начиная с 10.4 приложения, запускаемые через open, также наследуют переменные окружения, чтобы они работали и из командной строки. Если вы хотите избежать открытия окна терминала, легко создать простое приложение запуска с помощью AppleScript или Automator (или даже Python с py2app!). В этом случае используйте команду open, чтобы приложение запуска не сидело без дела. Например, в Automator выберите действие Run Shell Script и добавьте:

export PYTHONPATH= ...
open -a "/Applications/Python 2.6/IDLE.app"

Сохраните его в формате файла Application (в 10.5), и у вас должен быть интерактивный способ запуска специализированного IDLE.

0 голосов
/ 19 сентября 2009

Кажется, это общая проблема:

http://www.google.com/search?q=python+idle+pythonpath

К сожалению, ответов нет. Казалось, единственное предложение - отредактировать исполняемый файл idle и добавить несколько sys.path.insert(...) строк.

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