2016-05-03 24 views
27

Mentre si eseguono le versioni Linux di python, pip ecc. "Nativamente" su Windows è sorprendente, mi piacerebbe farlo utilizzando un IDE corretto. Dal momento che la compatibilità SSHD non è ancora stata implementata, sto cercando di far sì che PyCharm riconosca Linux python come interprete locale.Ottenere PyCharm per riconoscere python sul sottosistema di windows linux (bash su windows)

Dopo aver installato il sottosistema di Windows Linux, digitando

bash -c python 

dalla riga di comando di Windows vi porterà in un guscio di pitone.

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

funziona anche, producendo "ciao mondo" come output nella shell di windows!

Sto cercando di avvolgere questo come un file .bat e presentarla al PyCharm come interprete locale, cioè

python.bat:

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

Ma io continuo a ricevere "l'sdk sembra invalido "per qualsiasi variazione cerco. Dato che non sono sicuro di cosa stia facendo PyCharm per "validare" l'SDK, è difficile da superare.

+0

Lo si imposta i percorsi per Python? – 123

+2

Si noti che questo non è un tipico python su Windows Install. Sto provando ad accedere a python all'interno del sottosistema windows linux (vedi https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux). Questo non può essere risolto tramite percorsi. –

+2

C'è una richiesta di funzionalità aperta per questo, puoi seguirla (e votare): https://youtrack.jetbrains.com/issue/PY-19129 –

risposta

4

Beh, sono riuscito a produrre un brutto trucco. Dovrai installare python-setuptools e pip manualmente sotto il sottosistema Linux. Assicurati di utilizzare la versione pip fornita da PyCharm, la troverai su un percorso simile a:
C: \ Programmi (x86) \ JetBrains \ PyCharm 2016.1.2 \ helpers \ pip-7.1.0.tar. gz

Poi impostare il seguente script come "python.bat" sotto "C: \ Python" e punto PyCharm ad esso come interprete:

@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 

perdonare il terribile stile di codifica, come ho I file batch di Windows non sono mai stati sviluppati in precedenza.

Potrebbe essere necessario modificare la struttura della directory in modo che corrisponda al sistema. Si noti inoltre che l'output di qualsiasi script python chiamato da Python.bat viene reindirizzato a un file temporaneo sotto il sottosistema linux, quindi reimpostato in Windows. Per qualche motivo, la piping dell'output di bash.exe tramite Windows causa errori.

Spero che questo aiuti.

UPDATE: spostato la chiamata a "bash" su "Start" per evitare errori di manipolazione tubo terribili (c.f. https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13425768-allow-windows-programs-to-spawn-bash)

+0

Se si è provato a questo e si è verificato l'errore: "Impossibile trovare C: \ Windows \ System32 \ bash.exe". Assicurarsi di aver digitato correttamente il nome e quindi riprovare. ", Assicurarsi di eseguire PyCharm come amministratore . Passare alla directory di installazione (qualcosa come 'C: \ Programmi (x86) \ JetBrains \ PyCharm 2016.1.2 \ bin' o' C: \ Users \ \ AppData \ Local \ JetBrains \ Toolbox \ apps \ PyCharm-P \ ch-0 \ 145.1504.1 \ bin' se si utilizza l'app toolbox JetBrains), fare clic con il tasto destro su 'pycharm.exe' o' pycharm64.exe', selezionare ** Proprietà **, ** Compatibilità **, quindi controllare "Esegui questo programma come amministratore". – breandan

+0

Ricevo un messaggio di errore "interprete Python non valido" da pycharm durante il tentativo di aggiungere il blocco – user1946989

16

Utilizzando PyCharm con WSL Python su Win10 partire SSH

PyCharm può essere configurato solo per usare WSL Python come interprete Remote (questo è dovuto alla mancanza di altre API pubblica).

  • Installare Win10 build 14361 o successivo. Puoi anche aggiornare la tua anteprima Insider corrente.
  • Installare WSL (qualcosa come lxrun/install` & & lxrun/aggiornamento)
  • Run bash.exe
  • aggiornamento alla versione più recente sudo apt-get update & & sudo apt-get upgrade
  • Aprire/etc/ssh/sshd_config
    • Abilita l'autenticazione della password (a meno che non si desideri utilizzare le chiavi pubbliche). Apri/etc/ssh/sshd_config e imposta PasswordAuthentication yes.
    • Dato chroot non è implementata in WSL (ancora), è anche necessario impostare UsePrivilegeSeparation non
    • Salva e chiuderlo
  • Digitare sudo $ (sudo che sshd) -d per eseguire OpenSSH sul primo piano (è molto più facile per il debug). Si dovrebbe vedere qualcosa di simile a "Server in ascolto sulla porta 22 0.0.0.0"
  • Da un'altra sessione bash.exe prova ssh 127.0.0.1
  • Se viene visualizzato un messaggio su impronte digitali ECDSA, risposta a. Dovresti vedere la password. Se lo vedi, il tuo server funziona correttamente.

  • Spegnere con CTRL + C e avviare il server in modalità daemon (sudo service ssh start). Sembra che l'upstart sia rotto sulla rete WSL corrente, quindi è necessario eseguire bash.exe, avviare sshd e mantenere aperta la finestra della console poiché WSL si interrompe quando l'ultimo client si disconnette. È possibile creare il file wsl_ssh.bat come bash.exe -c "sudo service ssh start & & & sleep 999d" e usarlo per avviare ssh.

Configurazione PyCharm PyCharm deve essere configurato per utilizzare WSL come interprete a distanza, ma con fuori di implementazione, dal momento che ogni unità su Windows è mappata cartella appropriata in/mnt/a WSL. Quindi, devi solo configurare la mappatura. Per interprete remoto, vedi https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html. Dovresti usare 127.0.0.1 come nome host, e login e password che hai inserito dopo il primo lxrun/install. Dovresti anche impostare C: `a/mnt/c /` nei tuoi mapping. Guarda il video del post precedente.

Autore: Ilya Kazakevich
14 giugno 2016, 17:20

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

+0

Questa dovrebbe essere la risposta accettata – ThatAintWorking

0

vorrei aggiungere la risposta di bmjjr affermando che questo è disponibile solo con il PyCharm Professional Edition .La funzione di interprete remoto non è disponibile con la Community Edition, come ho tristemente scoperto:

supportato solo in Professional Edition

  • Cython
  • Django
  • AppEngine
  • Flask
  • Jinja2
  • Mako
  • web2py
  • piramide
  • Profiler
  • SQLAlchemy
  • Diagrammi
  • interpreti remoto, debug remoto, Vagrant, Docker
  • rilevamento
  • copertura del codice
  • file .po codice duplicati supporto
  • BDD supporto
  • integrazione Profiler
  • concorrenza thread visualizzazione

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