Можно ли избежать использования virtualenv при использовании Emacs Jedi (в Anaconda)?

Я использую фреймворк Anaconda Python. У Anaconda есть собственная система виртуальной среды, и мне не ясно, можно ли безопасно использовать virtualenv с Anaconda.

Emacs Jedi, кажется, требует virtualenv. Используется ли он во время выполнения или только во время установки? Можно ли использовать Jedi без установки virtualenv? Можно ли удалить virtualenv после завершения установки Jedi?

Есть ли способ задать этот вопрос непосредственно разработчикам-джедаям? (не смог найти способ)


person garyp    schedule 11.02.2014    source источник
comment
Виртуальный бокс? Вы смешиваете инструмент виртуализации а-ля VMware с платформой Python для установки пакетов без системных привилегий? Это совсем разные вещи.   -  person tripleee    schedule 11.02.2014
comment
Арх. Я использую Virtualbox, и мои пальцы соскальзывали при наборе текста. Редактирую сейчас. Спасибо.   -  person garyp    schedule 12.02.2014
comment
Ответ пользователя 2053036 работал в моей среде. Но возникла другая проблема, я думаю, что я не единственный, кто столкнулся с этой ошибкой: невозможно импортировать имя 'get_venv_path' из 'jedi.evaluate.sys_path' (d:\program_file\miniconda\envs\emacs- jedi\lib\site-packages\jedi\evaluate\sys_path.py) Я, наконец, избавился от этой ошибки, добавив метод get_venv_path() к sys_path.py, отображаемому в ошибке。 def get_venv_path(sys_path) : return [] это сработало для меня, хотя, возможно, это не очень хорошее решение.   -  person spider    schedule 28.05.2019


Ответы (3)


Есть ли способ задать этот вопрос непосредственно разработчикам-джедаям?

Вы можете использовать их средство отслеживания ошибок github, которое находится здесь.

На веб-сайте emacs-jedi указано, что virtualenv является необязательным, поэтому я думаю, jedi будет работать без него. Если вы можете опубликовать, как вы устанавливаете jedi или как вы хотите его установить (вручную, с помощью el-get или каким-либо другим способом), то люди здесь смогут помочь вам лучше.

ОБНОВЛЕНИЕ

Вот один из способов установить jedi вручную без virtualenv

1) Установить jedi из мелпа. Сделайте M-x list-packages, отметьте пакет jedi, нажав I, а затем нажмите X, чтобы установить пакет (это установит все зависимости, касающиеся elisp)

2) Затем установите зависимости python, вы можете скачать файл requirements.txt с здесь, а затем выполните pip install -r requirements.txt, это установит зависимости Python.

3) Добавьте крючок режима python для запуска jedi при открытии файлов python, в основном добавьте следующее в свой файл инициализации.

(autoload 'jedi:setup "jedi" nil t)
(add-hook 'python-mode-hook 'jedi:setup)

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

ОБНОВЛЕНИЕ 2

Ниже приведены шаги, чтобы заставить emacs-jedi работать с «средой среды conda» (я использовал miniconda, но это должно работать даже при полной установке conda)

1) Создайте среду conda (для текущего примера среда называется emacs-jedi), выполнив

conda create -n emacs-jedi python

2) Соберите пакет для jedi, epc и sexpdata (требуется для emacs-jedi)

a) Клонируйте репозиторий conda-recipes.

б) Соберите требуемый пакет, выполнив conda build /path/to/conda-recipies/<pkgname>

3) Переключитесь на среду, созданную выше, выполнив source activate emacs-jedi, и установите пакеты, созданные выше, выполнив

conda install --use-local jedi sexpdata epc

--use-local используется для указания conda на установку из локально собранных пакетов.

4) Наконец, дайте указание emacs использовать эту среду с джедаями, просто добавьте следующее в ваш файл инициализации.

(eval-after-load "jedi"
    '(setq jedi:server-command (list "/path/to/emacs-jedi/bin/python" jedi:server-script)))
person Community    schedule 11.02.2014
comment
На сайте есть подробная инструкция по ручной настройке. Кажется, что Virtualenv необходим только в том случае, если вы хотите полностью автоматическую установку через el-get (но, возможно, это хорошая идея даже для ручной установки). - person tripleee; 11.02.2014
comment
У меня есть установленный и работающий jedi, но поскольку garyp явно запросил не-virtualenv установку, я предоставил один способ сделать это. И вы правы, используя virtualenv, это хорошая идея. - person ; 11.02.2014
comment
Ручная установка, которую вы предлагаете, работала нормально. Ваш метод описан в документации джедаев, но я неправильно прочитал инструкции. Что касается virtualenv: Anaconda поставляется со своей собственной средой среды, и неясно, можно ли ее использовать одновременно с virtualenv. Может быть, но я не уверен. Я использовал как виртуальную среду, так и среду conda, и считаю, что для моих целей conda кажется более простой. Он, конечно, менее известен, чем virtualenv, и, я думаю, разработчики все еще его настраивают. И документы нуждаются в улучшении, но я думал то же самое о virtualenv. - person garyp; 13.02.2014
comment
Привет, кажется, что можно использовать jedi с инфраструктурой среды anaconda. Сначала вам нужно будет узнать, как установить jedi в conda, [github.com/conda/conda- recipes] содержит рецепт установки jedi. После того, как вы создали новую среду conda и установили в нее jedi, вы можете просто установить jedi:server-command в emacs на (your/conda/python /path/to/emacs-jedi/jediepcserver.py). Извините, что не предоставил конкретных инструкций (я не использую Anaconda), но эти указатели могут помочь. Не стесняйтесь спрашивать, если у вас возникнут какие-либо проблемы. - person ; 14.02.2014
comment
@garyp, мне удалось заставить emacs-jedi работать со средой conda, я обновил ответ. - person ; 14.02.2014
comment
Ссылка на требования мертва. - person The Unfun Cat; 07.08.2014

Разработчик Jedi.el здесь. Начиная с Jedi.el v0.2.0, virtualenv становится по умолчанию и настоятельно рекомендуется. Ручная установка по-прежнему поддерживается, но не рекомендуется, поскольку вам необходимо вручную синхронизировать версии модулей Jedi.el и Python. Видеть:

Я понятия не имею, что такое анаконда, но я предполагаю, что у нее есть своя среда обитания. Если это просто оболочка virtualenv, следуйте инструкциям в руководстве и используйте --virtual-env. Если нет, вы можете использовать --sys-path, чтобы сообщить Jedi.el о дополнительном пути к сайту. Видеть:

Во-первых, вам нужно найти путь к сайту, специфичный для анаконды. Бегать

python -c 'import sys; print(sys.path)'

в анаконде и найдите некоторые пути, специфичные для анаконды (я понятия не имею, что это будет, но я думаю, что он включает «анаконду» в путь). Затем добавьте эти пути, используя --sys-path. Код см. в документе jedi:server-args.

person tkf    schedule 13.03.2014
comment
Я точно не знаю, как это связано с использованием jedi.el с anaconda/conda (кроме того, что я не рекомендую это :)). Нужно ли что-то синхронизировать? Я не мог понять ссылки. В настоящее время все работает. Если я не синхронизируюсь, будут ли у меня в конечном итоге проблемы? Я считаю, что с anaconda/conda легче работать, чем с virtualenv, поэтому на данный момент мой приоритет — хранить вещи там. - person garyp; 14.03.2014
comment
Если я начну использовать какую-то новую функцию модулей Python и обновлю требуемую версию, у вас будут проблемы. Поскольку это не рекомендуется, немногие люди будут использовать ручной метод, поэтому будет трудно получить ответ, если у вас возникнут какие-либо вопросы. - person tkf; 14.03.2014
comment
OK. Я обновил ответ. Я предполагал, что анаконда была оболочкой для virtualenv в первом ответе. Но даже если это не так, вы всегда можете добавить sys.path, используя --sys-path, чтобы сообщить Jedi.el, что вы используете там модули. Кстати, если вам что-то непонятно в документе, сообщите об этом в трекере, потому что это ошибка документации, чтобы иметь непонятное руководство. - person tkf; 14.03.2014
comment
Здорово. Спасибо большое. - person garyp; 14.03.2014

Вот мой хак для установки переменной jedi:server-command:

(setq jedi:server-command
        `("python"
          ,(concat (file-name-directory
                   (buffer-file-name
                    (car
                     (find-definition-noselect 'jedi:setup nil))))
                  "jediepcserver.py")))
person Jason Furtney    schedule 09.02.2016