используйте ipython, чтобы получить РЕАЛЬНОЕ завершение кода в pycharm

Многие IDE Python могут похвастаться предоставлением автозавершения кода (понимание кода), PyCharm - одна из таких IDE. Однако мне кажется, что предоставленное автозавершение кода крайне ограничено. Позвольте мне привести пример, чтобы прояснить ситуацию:

import numpy as np
m = np.random.random((3,5))
m.

Нажатие CTRL-пробела после "m". не даст мне завершения кода, как бы сильно я ни ударил;) .. Я предполагаю, что это потому, что IDE должна будет сделать вывод типа, чтобы узнать тип переменной 'm', а это не ' t тривиально в области динамических языков программирования.

Теперь PyCharm поставляется с параметром «Сбор информации о типах времени выполнения для анализа кода», что действительно звучит многообещающе. Однако, похоже, это не решает проблему, упомянутую выше. Я все еще не могу получить завершение кода для переменной 'm'.

Пока что я нашел только один способ получить автозавершение кода для переменных в PyCharm:

import numpy as np
m = np.random.random((3,5))
''':type : np.matrix'''
m.

В этом примере я могу получить завершение кода при нажатии CTRL-пробела после «m.», И это потому, что я помогаю IDE, указывая тип переменной с помощью строки документации. Однако я не удовлетворен этим способом завершения кода, потому что он добавляет ненужную многословность к коду со всеми этими строками документации (не говоря уже о дополнительном вводе с клавиатуры) ...

IPython спешит на помощь .. (может быть?)

Теперь, если мы запустим IPython в Linux-терминале и введем первый фрагмент кода, мы сможем получить завершение кода полностью, даже для переменной m. (где завершение кода в IPython достигается нажатием TAB вместо CTRL-пробела) ..

У меня нет большого опыта работы с IPython, но я полагаю, что слышал что-то о том, что IPython постоянно выполняет код в цикле или что-то в этом роде ...

Я думаю, что можно использовать IPython для достижения НАСТОЯЩЕГО завершения кода для всех переменных в редакторе PyCharm ....

Есть ли способ настроить PyCharm для использования IPython для автозавершения кода?

Обратите внимание, что меня не устраивает отправка кода в окно / консоль терминала или что-то в этом роде, мне нужно завершение кода внутри редактора PyCharm ...

Я рассмотрел такие вопросы, как этот Добавление ipython в качестве интерпретатора в Pycharm Ubuntu, но, похоже, речь идет об использовании IPython в консоли, а не в редакторе ... Есть также много вопросов, касающихся автозавершения кода в IDE, но все они, похоже, имеют один и тот же неудовлетворительный уровень кода -завершение как PyCharm ...

Моя установка

  • ОС: тестирование Debian
  • python: Python3 и IPython3
  • IDE: профессиональная версия Pycharm 3.0.2

person Michelrandahl    schedule 31.01.2014    source источник
comment
Я думаю, что проблема в том, что IPython - это своего рода интерпретатор Python, а PyCharm (как и многие другие IDE) - это просто какой-то (очень goog!) Текстовый редактор. Короче говоря, один выполняет код по мере того, как вы набираете, а другой редактирует скрипт, который вы позже запускаете   -  person Alvaro Fuentes    schedule 31.01.2014
comment
Но я не понимаю, почему редактор PyCharm не может проконсультироваться с IPython (каким-то образом), чтобы сделать возможным реальное завершение кода ... Я предполагаю, что pycharm будет работать медленнее, - но я считаю это приемлемым .   -  person Michelrandahl    schedule 31.01.2014


Ответы (3)


У меня был такой же вопрос, я нашел ответ здесь: https://www.jetbrains.com/pycharm/help/using-ipython-notebook-with-pycharm.html

Что вам нужно сделать, так это создать записную книжку ipython в окне инструментов проекта. Это файл с расширением .ipynb. Щелкните правой кнопкой мыши каталог, в который вы хотите поместить файл, выберите «Создать» -> «Файл», введите имя файла в диалоговом окне и укажите расширение файла .ipynb. Откройте файл записной книжки, и когда вы начнете что-то вводить в окне, появится раскрывающееся окно с объектами в пространстве имен и любыми командами, которые начинаются с уже набранных букв.

person flynneria    schedule 03.01.2016

Он не может сказать, что возвращается от функций (без фактического запуска скрипта, поэтому ipython знает, что это такое (он фактически выполнил код и получил обратно объект, который он может исследовать)

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

import numpy as np
m = np.random.random((3,5))
assert isinstance(m,np.ndarray)
m. #now you get code completion (since the IDE now knows the class of m, without having to execute your script)
person Joran Beasley    schedule 31.01.2014
comment
к сожалению, это добавляет к коду такой же многословности, как и определение типов в строках документации. - person Michelrandahl; 31.01.2014
comment
к сожалению, так это работает ... ide не является интерпретатором: / ... он не выполняет ваш код, поэтому у него нет возможности узнать, какие типы есть, если они явно не созданы как класс (например, x=numpy.ndarray([1,2,3])) - person Joran Beasley; 31.01.2014

Чтобы реализовать в pycharm функциональность, подобную iPython, вы можете сделать это двумя способами:

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

  2. Запустите командную строку python с консоли (без запуска отладчика), щелкнув Инструменты, Запустить консоль Python.

person user2773013    schedule 04.10.2014