Подтвердить что ты не робот

Получение PyCharm для распознавания python в подсистеме Linux linux (bash на окнах)

При запуске Linux-версий python, pip и т.д. "изначально" на окнах потрясающе, я бы хотел сделать это, используя правильную среду IDE. Поскольку SSHD-совместимость еще не реализована, я пытаюсь заставить PyCharm распознавать Linux-питон как локальный интерпретатор.

После установки подсистемы Windows Linux введите

bash -c python

из командной строки Windows выведет вас в оболочку python.

bash -c "echo \"print 'hello world'\" | python" 

работает также, производя "hello world" как вывод в оболочке Windows!

Я пытаюсь обернуть это как .bat файл и представить его PyCharm в качестве локального интерпретатора, т.е.

python.bat:

C:\Windows\System32\bash.exe -c "echo %1 | python" 

Но я продолжаю получать "sdk кажется недействительным" для любого варианта, который я пытаюсь. Поскольку я не совсем уверен, что PyCharm делает для "проверки" SDK, это трудно преодолеть.

4b9b3361

Ответ 1

Использование PyCharm с WSL Python на Win10 Запуск SSH

PyCharm может быть настроен только на использование WSL Python в качестве удаленного интерпретатора (это связано с отсутствием другого открытого API).

  • Установите Win10 build 14361 или новее. Вы также можете обновить текущий предварительный просмотр.
  • Установить wsl (что-то вроде lxrun/install` & lxrun/update)
  • Запустите bash.exe
  • Обновить до последней версии sudo apt-get update && & && sudo apt-get upgrade
  • Открыть /etc/ssh/sshd _config
    • Включить аутентификацию пароля (если вы не хотите использовать открытые ключи). Откройте /etc/ssh/sshd _config и установите PasswordAuthentication yes.
    • Поскольку chroot не реализован в WSL (пока), вам также необходимо установить UsePrivilegeSeparation no
    • Сохранить и закрыть его
  • Введите sudo $(sudo, который sshd) -d для запуска OpenSSH на переднем плане (это намного проще для отладки). Вы должны увидеть что-то вроде "Сервер, прослушивающий на 0.0.0.0 порт 22"
  • Из другого сеанса bash.exe попробуйте ssh 127.0.0.1
  • Если вы видите сообщение об отпечатке пальца ECDSA, ответьте y. Вы должны увидеть подсказку пароля. Если вы это видите, ваш сервер работает правильно.

  • Отключите его с помощью CTRL + C и запустите сервер в режиме демона (sudo service ssh start). Похоже, что upstart нарушен в текущем WSL, поэтому вам нужно будет запустить bash.exe, запустить sshd и открыть консольное окно, поскольку WSL останавливается, когда последний клиент отключается. Вы можете создать файл wsl_ssh.bat, например, bash.exe -c "sudo service ssh start && sleep 999d" и использовать его для запуска ssh.

Настройка PyCharm PyCharm должен быть настроен на использование WSL в качестве удаленного интерпретатора, но с отсутствием развертывания, поскольку каждый диск в Windows сопоставляется с соответствующей папкой в ​​/mnt/в WSL. Таким образом, вам нужно только настроить отображение. Для удаленного интерпретатора см. https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html. Вы должны использовать 127.0.0.1 в качестве имени хоста, а логин и пароль вы ввели после первого lxrun/install. Вы также должны установить C: `to/mnt/c/` в своих сопоставлениях. Смотрите видео из предыдущего сообщения.

Автор: Илья Казакевич
14 июня 2016 года, 17:20

https://youtrack.jetbrains.com/issue/PY-19129#comment=27-1469350

Ответ 2

Я пытался работать с большинством решений, но главная проблема заключается в том, что я не могу понизить OpenSSH в Windows до уровня ниже 7.5, как это рекомендовано JetBrains.

К счастью, они решили эту проблему для нас! Я скачал версию Pycharm 2018.3 с ранним доступом

https://blog.jetbrains.com/pycharm/2018/10/pycharm-2018-3-eap-7/

enter image description here

Ответ 3

Ну, мне удалось создать уродливый рабочий хак. Вам нужно будет установить python-setuptools и pip вручную под подсистемой Linux. Обязательно используйте версию pip, предоставленную PyCharm, вы найдете ее на пути, подобном:
C:\Program Files (x86)\JetBrains\PyCharm 2016.1.2\helpers\pip-7.1.0.tar.gz

Затем установите следующий script как "python.bat" в разделе "c:\Python" и укажите PyCharm на него как интерпретатор:

@echo off
@setlocal enableextensions enabledelayedexpansion
:: Requiers pip and setuptools to already be installed on linux subsystem
Set "Pattern= "
Set "Replace=\ "
Set "cdrive=C:"
Set "linpath=/mnt/c"
:: Iterate over arguments, convert paths to linux format and concatinate

set argCount=0
for %%x in (%*) do (
    set /A argCount+=1
    set arg=%%x
    :: Backward slash to forward slash
    SET arg=!arg:\=/!
    :: C drive to /mnt/c/ - default linux subsystem mount point
    SET arg=!arg:%cdrive%=%linpath%!
    :: Space to escaped space
    SET arg=!arg:%Pattern%=%Replace%!
    :: Parethesis to escaped parenteses
    SET arg=!arg:^(=\^(!
    SET arg=!arg:^)=\^)%!
    :: Deqoute voodoo via http://ss64.com/nt/syntax-dequote.html
    SET arg=###!arg!###
    SET arg=!arg:"###=!
    SET arg=!arg:###"=!
    SET arg=!arg:###=!
    if "!args!"=="" (
        set args=!arg!
    ) else (
        set args=!args! !arg!
    )
)
:: Dump it to the interpreter
:: Output is piped inside the Linux subsys, as windows piping for bash seems broken
START "Terrible hack to avoid pipe error" /W /MIN C:\Windows\System32\bash.exe -c "python !args! > /mnt/c/Python/test" 
:: Output resulr from piped file
type c:\Python\test
:: echo !args!
EXIT /B > NUL

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

Возможно, вам придется настроить структуру каталогов в соответствии с вашей системой. Также обратите внимание, что вывод любого python script, вызываемый Python.bat, передается в файл temp под подсистемой linux, а затем выводится обратно под окнами. По какой-то причине вывод из строя вывода bash.exe через окна вызывает ошибки.

Надеюсь, что это поможет.

UPDATE: завершение вызова "bash" с помощью "START", чтобы избежать ошибок при обработке ошибок (cf https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13425768-allow-windows-programs-to-spawn-bash)

Ответ 5

Я хотел бы добавить ответ bmjjr, указав, что это доступно только с помощью PyCharm Professional Edition. Функция Remote Interpreter недоступна в Community Edition, поскольку я, к сожалению, узнал:

Поддерживается только в Professional Edition

  • Cython
  • Django
  • AppEngine
  • Колба
  • Jinja2
  • Мако
  • web2py
  • Пирамида
  • Профили
  • SQLAlchemy
  • Диаграммы
  • Удаленные интерпретаторы, удаленная отладка, Vagrant, Docker
  • Двойное обнаружение кода
  • Покрытие кода Поддержка файлов
  • .po
  • Поддержка BDD
  • Интеграция профилировщика
  • Тема Concurrency Визуализация

https://www.jetbrains.com/pycharm/features/editions_comparison_matrix.html

Ответ 6

Настройте удаленного переводчика через WSL #

  1. Откройте диалоговое окно Add Python Interpreter одним из следующих способов:

    • Когда вы находитесь в редакторе, наиболее удобный способ - использовать виджет Python Interpreter в строке состояния. Нажмите на виджет и выберите Добавить переводчика...

    • Если вы находитесь в диалоговом окне "Настройки/Настройки" (Ctrl + Alt + S), выберите "Проект | Переводчик проекта. Щелкните значок "Настроить интерпретатор проекта" и выберите "Добавить".

  2. В левой части диалогового окна нажмите WSL.

    Используйте Анаконду:

    .\rootfs\home\$UserName$\anaconda\envs\$Conda_Env$\bin\python3

    Используйте Pyhton: добавление интерпретатора WSL

  3. Выберите дистрибутив Linux и укажите путь к исполняемому файлу python в выбранном дистрибутиве Linux.

После этого новый интерпретатор будет добавлен в ваш проект, и будут установлены сопоставления по умолчанию для mnt.

Недавно добавленный интерпретатор WSL

Обратите внимание, что с WSL вы не можете создавать виртуальные среды: все установленные вами пакеты будут добавлены в соответствующий системный интерпретатор. Вам будет предложено ввести пароль sudo.

Ввод вашего пароля sudo

Ссылка: JetBrains

Ответ 7

Я использовал обычный удаленный ssh intepreter "старый метод", обсуждаемый в этой ссылке здесь:

Я использовал это руководство: критически я получил ошибку аутентификации, которая была устранена с помощью этой: