web-dev-qa-db-fra.com

Faire reconnaître PyCharm python sur le sous-système Windows Linux (bash sur Windows)

Bien que l'exécution de versions Linux de python, pip etc. "nativement" sur Windows soit incroyable, j'aimerais le faire en utilisant un IDE approprié. Étant donné que la compatibilité SSHD n'a pas encore été implémentée, j'essaie d'obtenir que PyCharm reconnaisse Linux python en tant qu'interprète local).

Après avoir installé le sous-système Windows Linux, tapez

bash -c python

à partir de la ligne de commande Windows vous déposera dans un python Shell.

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

fonctionne aussi bien, produisant "hello world" en sortie dans le shell Windows!

J'essaie de conclure cela sous forme de fichier .bat et de le présenter à PyCharm en tant qu'interprète local, c'est-à-dire.

python.bat:

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

Mais je continue à obtenir "le sdk semble invalide" pour toute variation que j'essaie. Comme je ne sais pas exactement ce que PyCharm fait pour "valider" le SDK, cela est difficile à surmonter.

37
Boaz Arad

Utilisation de PyCharm avec WSL Python sur Win10 Démarrage de SSH

PyCharm ne peut être configuré que pour utiliser WSL Python comme interpréteur distant (cela est dû au manque d'autres API publiques).

  • Installez Win10 build 14361 ou version ultérieure. Vous pouvez également mettre à niveau votre aperçu Insider actuel.
  • Installez wsl (quelque chose comme lxrun/install` && lxrun/update)
  • Exécutez bash.exe
  • Mise à jour vers la dernière version Sudo apt-get update && Sudo apt-get upgrade
  • Ouvrez /etc/ssh/sshd_config
    • Activez l'authentification par mot de passe (sauf si vous souhaitez utiliser des clés publiques). Ouvrez/etc/ssh/sshd_config et définissez PasswordAuthentication yes.
    • Étant donné que chroot n'est pas encore implémenté dans WSL, vous devez également définir UsePrivilegeSeparation no
    • Enregistrez-le et fermez-le
  • Tapez Sudo $ (Sudo which sshd) -d pour exécuter OpenSSH au premier plan (c'est beaucoup plus facile pour le débogage). Vous devriez voir quelque chose comme "Écoute du serveur sur le port 22 de 0.0.0.0"
  • À partir d'une autre session bash.exe, essayez ssh 127.0.0.1
  • Si vous voyez un message sur l'empreinte digitale ECDSA, répondez y. Vous devriez voir l'invite de mot de passe. Si vous le voyez, votre serveur fonctionne correctement.

  • Désactivez-le avec CTRL + C et démarrez le serveur en mode démon (Sudo service ssh start). Il semble que upstart soit interrompu sur le WSL actuel, vous devez donc exécuter bash.exe, démarrer sshd et garder la fenêtre de la console ouverte puisque WSL s'arrête lorsque le dernier client se déconnecte. Vous pouvez créer un fichier wsl_ssh.bat comme bash.exe -c "Sudo service ssh start &&& sleep 999d" et l'utiliser pour lancer ssh.

Configuration de PyCharm PyCharm doit être configuré pour utiliser WSL comme interpréteur distant mais sans déploiement, car chaque lecteur sous Windows est mappé vers le dossier approprié dans/mnt/dans WSL. Il vous suffit donc de configurer le mappage. Pour l'interpréteur distant, voir https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html . Vous devez utiliser 127.0.0.1 comme nom d'hôte, ainsi que l'identifiant et le mot de passe que vous avez entrés après le premier lxrun/install. Vous devez également définir C: `sur/mnt/c /` dans vos mappages. Voir la vidéo du post précédent.

Auteur: Ilya Kazakevich
14 juin 2016, 17:20

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

31
Bob Jordan

J'ai essayé de travailler avec la plupart des solutions, mais le principal problème est que je ne peux pas rétrograder OpenSSH sur Windows à quelque chose en dessous de 7,5 comme recommandé par JetBrains.

Heureusement, ils ont résolu ce problème pour nous! J'ai téléchargé la version Early Access de Pycharm 2018.3

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

enter image description here

9
bitwhys

Je voudrais ajouter la réponse de bmjjr en déclarant que ceci n'est disponible qu'avec PyCharm Professional Edition . La fonction d'interpréteur à distance n'est pas disponible avec l'édition communautaire, comme je l'ai malheureusement découvert:

Pris en charge uniquement dans Professional Edition

  • Cython
  • Django
  • AppEngine
  • Flask
  • Jinja2
  • Mako
  • web2py
  • Pyramide
  • Profiler
  • SQLAlchemy
  • Diagrammes
  • Interprètes à distance, débogage à distance, Vagrant, Docker
  • Détection de code en double
  • Couverture de code
  • Prise en charge des fichiers .po
  • Prise en charge BDD
  • Intégration du profileur
  • Visualisation de la concurrence des threads

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

4
jonathan

Pris en charge via remote int. Voir le dernier commentaire: https://youtrack.jetbrains.com/issue/PY-19129

4
user996142

Eh bien, j'ai réussi à produire un hack laid et fonctionnel. Vous devrez installer python-setuptools et pip manuellement sous le sous-système Linux. Assurez-vous d'utiliser la version pip fournie par PyCharm, vous la trouverez à un chemin similaire à:
C:\Program Files (x86)\JetBrains\PyCharm 2016.1.2\helpers\pip-7.1.0.tar.gz

Ensuite, configurez le script suivant comme "python.bat" sous "c:\Python" et pointez PyCharm vers lui en tant qu'interpréteur:

@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

Pardonnez le terrible style de codage, car je n'ai jamais vraiment développé de fichiers batch Windows auparavant.

Vous devrez peut-être modifier la structure du répertoire pour l'adapter à votre système. Notez également que la sortie de tout script python appelé par Python.bat est redirigée vers un fichier temporaire sous le sous-système linux, puis tapée sous Windows. Pour une raison quelconque, rediriger la sortie de bash .exe via Windows provoque des erreurs.

J'espère que cela t'aides.

MISE À JOUR: Enveloppé l'appel à "bash" avec "START" afin d'éviter de terribles erreurs de gestion des tuyaux (cf https://wpdev.uservoice.com/forums/266908-command-Prompt-console-bash-on -ubuntu-on-windo/suggestions/13425768-allow-windows-programs-to-spawn-bash )

4
Boaz Arad

Configurer l'interpréteur distant via WSL #

  1. Ouvrez la boîte de dialogue Add Python Interpreter de l'une ou l'autre manière:

    • Lorsque vous êtes dans l'éditeur, le moyen le plus pratique consiste à utiliser le widget interprète Python dans la barre d'état. Cliquez sur le widget et sélectionnez Ajouter un interprète ...

    • Si vous êtes dans la boîte de dialogue Paramètres/Préférences (Ctrl + Alt + S), sélectionnez Projet | Interprète de projet. Cliquez sur l'icône The Configure project interpreter et sélectionnez Ajouter.

  2. Dans le volet gauche de la boîte de dialogue, cliquez sur WSL.

    Utilisez Anaconda:

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

    Utilisez Pyhton: Ajout d'un interpréteur WSL

  3. Sélectionnez la distribution Linux et spécifiez le chemin d'accès à l'exécutable python dans la distribution Linux sélectionnée.

Une fois terminé, le nouvel interpréteur sera ajouté à votre projet et la valeur par défaut mnt mappings sera définie.

Interprète WSL nouvellement ajouté

Notez qu'avec WSL, vous ne pouvez pas créer d'environnements virtuels: tous les packages que vous installez seront ajoutés à l'interpréteur système correspondant. Il vous sera demandé de saisir votre mot de passe Sudo.

Saisie de votre mot de passe Sudo

Référence: JetBrains

0
Islam Mansour

J'ai utilisé l'interpréteur ssh distant normal "ancienne méthode" discutée dans ce lien ici :

J'ai utilisé ce guide : de manière critique, j'obtenais une erreur d'authentification qui a été résolue avec this :

0
user2673238