open from python pycharm windows-subsystem-for-linux

from - install python bash



Hacer que PyCharm reconozca python en el subsistema de windows linux(bash en windows) (4)

Si bien ejecutar versiones de Linux de python, pip, etc. "nativamente" en Windows es increíble, me gustaría hacerlo con un IDE apropiado. Como la compatibilidad con SSHD aún no se ha implementado, intento que PyCharm reconozca a Linux python como intérprete local.

Después de instalar el subsistema Linux de Windows, escribiendo

bash -c python

desde la línea de comandos de Windows lo llevará a un shell de python.

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

funciona también, produciendo "hello world" como salida en el shell de Windows!

Estoy tratando de terminar esto como un archivo .bat y presentarlo a PyCharm como un intérprete local, es decir,

python.bat:

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

Pero sigo recibiendo "el SDK parece no válido" para cualquier variación que intento. Como no estoy seguro de lo que PyCharm está haciendo para "validar" el SDK, es difícil de superar.


Bueno, he logrado producir un truco de trabajo feo. Tendrá que instalar python-setuptools y pip manualmente bajo el subsistema Linux. Asegúrate de usar la versión pip proporcionada por PyCharm, la encontrarás en un camino similar a:
C: / Archivos de programa (x86) / JetBrains / PyCharm 2016.1.2 / helpers / pip-7.1.0.tar.gz

A continuación, configure el siguiente script como "python.bat" en "c: / Python" y señale PyCharm como intérprete:

@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

Perdona el terrible estilo de codificación, ya que nunca antes había desarrollado archivos de lotes de Windows.

Es posible que deba modificar la estructura del directorio para que coincida con su sistema. También tenga en cuenta que la salida de cualquier secuencia de comandos python invocada por Python.bat se canaliza a un archivo temporal bajo el subsistema Linux, y luego se vuelve a escribir en ventanas. Por alguna razón, conectar la salida de bash.exe a través de Windows provoca errores.

Espero que esto ayude.

ACTUALIZACIÓN: Envolvió la llamada a "bash" con "START" para evitar terribles errores de manejo de tuberías (cf https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13425768-allow-windows-programs-to-spawn-bash )



Me gustaría agregar la respuesta de bmjjr indicando que esto solo está disponible con PyCharm Professional Edition . La función de Intérprete remoto no está disponible con Community Edition, ya que lamentablemente descubrí:

Solo se admite en Professional Edition

  • Cython
  • Django
  • App Engine
  • Matraz
  • Jinja2
  • Mako
  • web2py
  • Pirámide
  • Profiler
  • SQLAlchemy
  • Diagramas
  • Intérpretes remotos, depuración remota, Vagrant, Docker
  • Detección de código duplicado
  • Cobertura de código
  • Soporte de archivos .po
  • BDD support
  • Integración de Profiler
  • Visualización de concurrencia de subprocesos

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


Uso de PyCharm con WSL Python en Win10 Iniciando SSH

PyCharm solo se puede configurar para usar WSL Python como intérprete remoto (esto se debe a la falta de otra API pública).

  • Instale Win10 build 14361 o posterior. También puede actualizar su vista previa de Insider actual.
  • Instalar wsl (algo así como lxrun / install` && lxrun / update)
  • Ejecute bash.exe
  • Actualiza a la última versión sudo apt-get update && sudo apt-get upgrade
  • Abre / etc / ssh / sshd_config
    • Habilite la autenticación de contraseña (a menos que desee usar claves públicas). Abra / etc / ssh / sshd_config y establezca PasswordAuthentication yes.
    • Como chroot no está implementado en WSL (todavía), también debe configurar UsePrivilegeSeparation sin
    • Guárdalo y ciérralo
  • Escriba sudo $ (sudo which sshd) -d para ejecutar OpenSSH en primer plano (es mucho más fácil depurar). Debería ver algo como "Servidor escuchando en el puerto 0.0.0.0 22"
  • Desde otra sesión bash.exe, pruebe ssh 127.0.0.1
  • Si ve un mensaje sobre huella dactilar ECDSA, responda y. Debería ver la solicitud de contraseña. Si lo ves, entonces tu servidor funciona correctamente.

  • Desactívelo con CTRL + C e inicie el servidor en modo daemon (servicio sudo ssh start). Parece que el upstart está roto en WSL actual, por lo que necesitaría ejecutar bash.exe, iniciar sshd y mantener abierta la ventana de la consola, ya que WSL se detiene cuando se desconecta el último cliente. Puede crear el archivo wsl_ssh.bat como bash.exe -c "sudo service ssh start &&& sleep 999d" y usarlo para iniciar ssh.

Configuración de PyCharm PyCharm debe configurarse para usar WSL como intérprete remoto pero sin implementación, ya que cada unidad en Windows se asigna a la carpeta apropiada en / mnt / en WSL. Entonces, solo necesitas configurar el mapeo. Para el intérprete remoto, consulte https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html . Debería usar 127.0.0.1 como nombre de host, y nombre de usuario y contraseña que ingresó después del primer lxrun / install. También debe establecer C: `a / mnt / c /` en sus asignaciones. Ver el video de la publicación anterior.

Autor: Ilya Kazakevich
14 de junio de 2016, a las 17:20

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