Getting PyCharm to recognize python on the windows linux subsystem (bash on windows)

前端 未结 7 1715
不思量自难忘°
不思量自难忘° 2020-12-12 15:07

While running Linux versions of python, pip etc. \"natively\" on windows is amazing, I\'d like to do so using a proper IDE. Since SSHD compatibility has not been implemented

相关标签:
7条回答
  • 2020-12-12 15:29

    Well, I've managed to produce an ugly working hack. You'll have to install python-setuptools and pip manually under the Linux subsystem. Be sure to use the pip version provided by PyCharm, you'll find it at a path similar to:
    C:\Program Files (x86)\JetBrains\PyCharm 2016.1.2\helpers\pip-7.1.0.tar.gz

    Then setup the following script as "python.bat" under "c:\Python" and point PyCharm to it as an interpreter:

    @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
    

    Forgive the terrible coding style, as I've never really developed windows batch files before.

    You may have to tweak the directory structure to match your system. Also note that the output of any python script called by Python.bat is piped to a temp file under the linux subsystem, then typed back out under windows. For some reason, piping the output of bash.exe via windows causes errors.

    Hope this helps.

    UPDATE: Wrapped the call to "bash" with "START" in order to avoid terrible pipe handling errors (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 讨论(0)
  • 2020-12-12 15:34

    Supported via remote int. See last comment: https://youtrack.jetbrains.com/issue/PY-19129

    0 讨论(0)
  • 2020-12-12 15:37

    I tried working with most solutions but the main issue is that I can't downgrade OpenSSH on Windows to something below 7.5 as is recommended by JetBrains.

    Luckily they have solved this issue for us! I have downloaded the Early Access version of Pycharm 2018.3

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

    This is however only available in the professional version.

    0 讨论(0)
  • 2020-12-12 15:39

    Configure remote interpreter via WSL #

    1. Open the Add Python Interpreter dialog by either way:

      • When you're in the Editor, the most convenient way is to use the Python Interpreter widget in the Status bar. Click the widget and select Add Interpreter ...

      • If you are in the Settings/Preferences dialog (Ctrl+Alt+S), select Project | Project Interpreter. Click The Configure project interpreter icon and select Add.

    2. In the left-hand pane of the dialog, click WSL.

    Use Anaconda:

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

    Use Pyhton: Adding a WSL interpreter

    1. Select the Linux distribution and specify the path to the python executable in the selected Linux distribution.

    Once done, the new interpreter will be added to your project, and the default mnt mappings will be set.

    Newly added WSL interpreter

    Note that with WSL you cannot create virtual environments: all packages you install will be added to the corresponding system interpreter. You will be asked to enter your sudo password.

    Entering your sudo password

    Reference: JetBrains

    0 讨论(0)
  • 2020-12-12 15:41

    I used the normal remote ssh intepreter "old method" discussed in this link here:

    I used this guide: critically I was getting an authentication error which was resolved with this:

    0 讨论(0)
  • 2020-12-12 15:44

    Using PyCharm Professional with WSL Python on Win10 Starting SSH

    PyCharm can only be configured to use WSL Python as a Remote Interpreter (this is due to lack of other public API).

    • Install Win10 build 14361 or later. You also can upgrade your current Insider Preview.
    • Install wsl (something like lxrun /install` && lxrun /update )
    • Run bash.exe
    • Update to latest version sudo apt-get update && sudo apt-get upgrade
    • Open /etc/ssh/sshd_config
      • Enable password authentication (unless you want to use public keys). Open /etc/ssh/sshd_config , and set PasswordAuthentication yes.
      • Since chroot is not implemented in WSL (yet), you also need to set UsePrivilegeSeparation no
      • Save and close it
    • Type sudo $(sudo which sshd) -d to run OpenSSH on foreground (it is much easier for debug). You should see something like Server listening on 0.0.0.0 port 22
    • From another bash.exe session try ssh 127.0.0.1
    • If you see message about ECDSA finger print, answer y . You should see password prompt. If you see it, then your server works correctly.

    • Turn it off with CTRL+C, and start server in daemon mode (sudo service ssh start). Looks like upstart is broken on current WSL, so you would need to run bash.exe, start sshd and keep console window opened since WSL stops when the last client disconnects. You may create wsl_ssh.bat file like bash.exe -c "sudo service ssh start &&& sleep 999d" and use it to launch ssh.

    Configuring PyCharm PyCharm should be configured to use WSL as a remote interpreter but without deployment, since each drive on Windows is mapped to an appropriate folder in /mnt/<DRIVE_NAME> in WSL. So, you only need to configure the mapping. For remote interpreters, see configuration-remote-python-interpreters . You should use 127.0.0.1 as hostname, and login and password you entered after first lxrun /install. You also should set C:\ to /mnt/c/ in your mappings. See the video from the previous post.

    Author: Ilya Kazakevich
    14 Jun 2016, 17:20

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

    0 讨论(0)
提交回复
热议问题