47

虽然在 Windows 上“本机”运行 Linux 版本的 python、pip 等非常棒,但我想使用合适的 IDE 来实现。由于尚未实现 SSHD 兼容性,我正在尝试让 PyC​​harm 将 Linux python 识别为本地解释器。

安装 Windows Linux 子系统后,键入

bash -c python

从 Windows 命令行将您放入 python shell。

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

也可以,在 windows shell 中生成“hello world”作为输出!

我正在尝试将其包装为 .bat 文件并将其作为本地解释器呈现给 PyCharm,即

python.bat:

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

但是对于我尝试的任何变体,我都会不断收到“sdk 似乎无效”。由于我不确定 PyCharm 究竟在做什么来“验证”SDK,所以这很难克服。

4

7 回答 7

34

在 Win10 上使用 PyCharm Professional 和 WSL Python 启动 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(调试更容易)。你应该看到类似的东西Server listening on 0.0.0.0 port 22
  • 从另一个bash.exe会话尝试ssh 127.0.0.1
  • 如果您看到有关 ECDSA 指纹的消息,请回答y。您应该看到密码提示。如果你看到它,那么你的服务器工作正常。

  • CTRL使用+将其关闭C,并以守护程序模式 ( sudo service ssh start) 启动服务器。看起来新贵在当前 WSL 上已损坏,因此您需要运行bash.exe、启动sshd并保持控制台窗口打开,因为 WSL 在最后一个客户端断开连接时停止。您可以创建wsl_ssh.bat类似的文件bash.exe -c "sudo service ssh start &&& sleep 999d" 并使用它来启动 ssh。

配置 PyCharm PyCharm 应配置为使用 WSL 作为远程解释器,但无需部署,因为 Windows 上的每个驱动器都映射到/mnt/<DRIVE_NAME> WSL 中的适当文件夹。因此,您只需要配置映射。对于远程解释器,请参阅configuration-remote-python-interpreters。您应该使用127.0.0.1 作为主机名,以及您在 first 之后输入的登录名和密码lxrun /install。您还应该在映射中设置C:\为 。/mnt/c/请参阅上一篇文章中的视频。

作者:Ilya Kazakevich
2016 年 6 月 14 日,17 :20

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

于 2017-01-18T18:29:43.967 回答
16

我尝试使用大多数解决方案,但主要问题是我无法按照 JetBrains 的建议将 Windows 上的 OpenSSH 降级到 7.5 以下。

幸运的是,他们已经为我们解决了这个问题!我已经下载了 Pycharm 2018.3 的抢先体验版

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

在此处输入图像描述

然而,这仅在专业版中可用。

于 2018-10-21T00:58:18.500 回答
6

我想通过说明这仅适用于 PyCharm Professional Edition来添加 bmjjr 的答案。社区版不提供远程口译员功能,我很遗憾地发现:

仅在专业版中支持

  • 赛通
  • 姜戈
  • 应用引擎
  • 烧瓶
  • 神社2
  • 真子
  • web2py
  • 金字塔
  • 探查器
  • SQL炼金术
  • 图表
  • 远程解释器、远程调试、Vagrant、Docker
  • 重复代码检测
  • 代码覆盖率
  • .po 文件支持
  • BDD 支持
  • 探查器集成
  • 线程并发可视化

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

于 2017-08-03T10:58:32.963 回答
5

好吧,我已经设法产生了一个丑陋的工作黑客。您必须在 Linux 子系统下手动安装 python-setuptools 和 pip。请务必使用 PyCharm 提供的 pip 版本,您会在类似以下路径找到它:
C:\Program Files (x86)\JetBrains\PyCharm 2016.1.2\helpers\pip-7.1.0.tar.gz

然后将以下脚本设置为“c:\Python”下的“python.bat”,并将 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.bat 调用的任何 python 脚本的输出都会通过管道传输到 linux 子系统下的临时文件,然后在 windows 下输入。出于某种原因,通过 Windows 管道输出 bash.exe 会导致错误。

希望这可以帮助。

更新:用“START”包装对“bash”的调用,以避免可怕的管道处理错误(参见https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on -windo/suggestions/13425768-allow-windows-programs-to-spawn-bash

于 2016-05-03T12:58:28.480 回答
4

通过远程 int 支持。见最后评论:https ://youtrack.jetbrains.com/issue/PY-19129

于 2016-06-14T20:26:18.433 回答
2

通过 WSL 配置远程解释器 #

  1. 通过任一方式打开“添加 Python 解释器”对话框:

    • 当您在编辑器中时,最方便的方法是使用状态栏中的 Python 解释器小部件。单击小部件并选择添加解释器...

    • 如果您在 Settings/Preferences 对话框 (Ctrl+Alt+S),请选择 Project | 项目口译员。单击配置项目解释器图标并选择添加。

  2. 在对话框的左侧窗格中,单击 WSL。

使用蟒蛇:

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

使用 Pyhton: 添加 WSL 解释器

  1. 选择 Linux 发行版并指定所选 Linux 发行版中 python 可执行文件的路径。

完成后,新的解释器将添加到您的项目中,并设置默认的mnt 映射

新增 WSL 解释器

请注意,使用 WSL,您无法创建虚拟环境:您安装的所有包都将添加到相应的系统解释器中。您将被要求输入您的 sudo 密码。

输入您的 sudo 密码

参考: JetBrains

于 2019-05-18T09:11:03.210 回答
0

我在这里使用了此链接中讨论的普通远程 ssh 解释器“旧方法” :

我使用了本指南:关键是我遇到了一个身份验证错误,该错误已通过以下方式解决:

于 2019-08-26T05:30:02.770 回答