Получение PyCharm для распознавания Python в подсистеме Linux Linux (Bash на Windows)

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

После установки подсистемы 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, это трудно преодолеть.

5 ответов

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

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

  • Установите Win10 build 14361 или новее. Вы также можете обновить текущую версию Insider Preview.
  • Установите 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 which sshd) -d, чтобы запустить OpenSSH на переднем плане (это намного проще для отладки). Вы должны увидеть что-то вроде "Сервер слушает на 0.0.0.0 порт 22"
  • Из другой сессии bash.exe попробуйте ssh 127.0.0.1
  • Если вы видите сообщение об отпечатке пальца ECDSA, ответьте y. Вы должны увидеть подсказку пароля. Если вы видите это, то ваш сервер работает правильно.

  • Отключите его, нажав CTRL+C, и запустите сервер в режиме демона (запуск ssh службы sudo). Похоже, что 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:`в /mnt/c/ ` в ваших отображениях. Смотрите видео из предыдущего поста.

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

https://youtrack.jetbrains.com/issue/PY-19129

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

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

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

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

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

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

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

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

Затем установите следующий скрипт как "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, вызываемого Python.bat, передаются во временный файл в подсистеме linux, а затем выводятся обратно в Windows. По какой-то причине передача bash.exe через windows приводит к ошибкам.

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

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

Поддерживается через удаленный инт. Смотрите последний комментарий: https://youtrack.jetbrains.com/issue/PY-19129

Настройте удаленного переводчика через 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

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

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

Другие вопросы по тегам