Задаване на правилна версия на Python и променлива PYTHONPATH в emacs

Опитвам се да науча разработването на Emacs за Python и открих, че някои от проектите ми не работят поради проблем с импортирането на модули, а именно SciPy или NumPy не се импортират. Опитах решения, предложени за свързани въпроси, зададени тук, като промяна на променливата на средата на PYTHONPATH, но нито едно не беше добро. След като сравних sys.path при използване на IDLE и обикновен интерпретатор от терминал, разбрах, че се използват различни версии: Python-2.7.3 в IDLE

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "copyright", "credits" or "license()" for more information.
==== No Subprocess ====
>>> from pprint import pprint as pp
>>> import sys
>>> pp(sys.path)
['/home/mench',
'/usr/bin',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
'/usr/lib/python2.7/dist-packages/ubuntuone-couch',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']

и Python-2.7.2 като системен интерпретатор по подразбиране

Python 2.7.2 (default, Mar  1 2012, 22:28:45) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint import pprint as pp
>>> import sys
>>> pp(sys.path)
['',
'/home/mench',
'/opt/alps/lib',
'/usr/local/lib/python27.zip',
'/usr/local/lib/python2.7',
'/usr/local/lib/python2.7/plat-linux2',
'/usr/local/lib/python2.7/lib-tk',
'/usr/local/lib/python2.7/lib-old',
'/usr/local/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']   

Въпросът е: Как мога да накарам Emacs да използва правилна версия на Python? Използвам GNU emacs-23.3.1 на Ubuntu 12.04 Моля, поправете ме, ако предположенията ми за проблема са грешни


person mench    schedule 04.12.2012    source източник


Отговори (1)


Мисля, че проблемът е, че е избран грешен изпълним файл на python. Обикновено sys.path за модули е зададено по подходящ начин, ако инсталирате модули по нормални начини (pip, setup.py и т.н.).

Проблемът е, че сте инсталирали ръчно python 2.7.2 в /usr/local/bin, който обикновено идва преди /usr/bin в $PATH. Ето защо вашият питон по подразбиране в терминала е 2.7.2. За да кажете изрично на Emacs, че искате да използвате python в определен път (т.е. /usr/bin/python), имате нужда от конфигурация на Emacs за python-mode.

Има някои режими на Python за Emacs, но предполагам, че използвате "стария" python.el, тъй като използвате Emacs 23. За да зададете изпълним файл на Python, мисля, че добавянето на това във вашата Emacs конфигурация върши работа (Но никога не използвам това python-mode, така че не съм сигурен дали работи.):

(setq python-python-command "/usr/bin/python")

Ще трябва да отворите отново файла на Python, след като оцените този код. Или просто рестартирайте Emacs.

Ако използвате новия python.el, трябва да добавите /usr/bin/ към python-shell-exec-path. Ако използвате python-mode.el, предполагам, че е (setq py-shell-local-path "/usr/bin/python" py-use-local-default t).

person tkf    schedule 05.12.2012
comment
Благодаря ти много. Първоначално не ми беше ясно, поради невежеството ми в emacs. Също така бях доста объркан от различните кръпки, които използвах, за да настроя python-mode. Сега всичко работи добре. За всички, които четат това, моля, гласувайте за този отговор, той беше правилен и полезен - person mench; 05.12.2012
comment
За python-mode.el настройката на тези две променливи, както описахте, не промени кой изпълним файл на python сочи моят IPy режим. Това е в emacs 24.5.1 с python 2.7.6, ipython 5.1.0, python-mode версия 6.2.1, работещ на Ubuntu 14.04 LTS, BTW. Какво друго мога да опитам? - person fpt; 02.09.2016
comment
@mench Ако е правилно и полезно, трябва да го приемете като такова. - person Ytsen de Boer; 22.12.2018