让 PyC​​harm 在 windows linux 子系统上识别 python(windows 上的 bash)

Posted

技术标签:

【中文标题】让 PyC​​harm 在 windows linux 子系统上识别 python(windows 上的 bash)【英文标题】:Getting PyCharm to recognize python on the windows linux subsystem (bash on windows) 【发布时间】:2016-08-28 06:20:54 【问题描述】:

虽然在 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,所以这很难克服。

【问题讨论】:

你为python设置了路径吗? 请注意,这不是典型的 windows 安装 python。我正在尝试在 windows linux 子系统中访问 python(请参阅en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)。这无法通过路径解决。 有一个开放的功能请求,你可以关注它(并投票):youtrack.jetbrains.com/issue/PY-19129 谢谢,我猜这将在 MS 实现 SSHD 工作所缺少的功能后得到解决,然后“远程解释器”设置应该可以工作。 【参考方案1】:

通过 WSL 配置远程解释器#

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

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

    如果您在“设置/首选项”对话框中 (Ctrl+Alt+S),请选择项目 |项目口译员。单击The Configure project interpreter 图标并选择添加。

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

使用 Anaconda:

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

使用 Pyhton: Adding a WSL interpreter

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

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

Newly added WSL interpreter

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

Entering your sudo password

参考: JetBrains

【讨论】:

【参考方案2】:

在 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 上的每个驱动器都映射到 WSL 中 /mnt/<DRIVE_NAME> 中的适当文件夹。因此,您只需要配置映射。对于远程口译员,请参阅configuration-remote-python-interpreters。您应该使用127.0.0.1 作为主机名,并使用您在第一个lxrun /install 之后输入的登录名和密码。您还应该在映射中将C:\ 设置为/mnt/c/。请参阅上一篇文章中的视频。

作者:伊利亚·卡扎克维奇 2016 年 6 月 14 日 17:20

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

【讨论】:

我在 sshd_config 文件中找不到“UsePrivilegeSeparation”。我应该添加它还是我的配置文件有问题? @Tyberius UsePrivelegeSeperation 在较新版本的 OpenSSH 中已被弃用。这可能就是发生在你身上的事情。 @Seanny123 是的,我最终直接询问了 JetBrains 并得到了相同的答案。从好的方面来说,我认为 Pycharm 的最新版本将包括对访问 WSL 的原生支持。【参考方案3】:

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

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

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

不过,这仅适用于专业版。

【讨论】:

【参考方案4】:

我使用了in this link here 讨论过的普通远程 ssh 解释器“旧方法”:

我用this guide: 关键是我遇到了一个身份验证错误,该错误已通过this 解决:

【讨论】:

【参考方案5】:

我想添加 bmjjr 的答案,说明这仅适用于 PyCharm 专业版。社区版不提供远程翻译功能,我很遗憾地发现:

仅专业版支持

赛通 姜戈 AppEngine 烧瓶 Jinja2 真子 web2py 金字塔 分析器 SQLAlchemy 图表 远程解释器、远程调试、Vagrant、Docker 重复代码检测 代码覆盖率 .po 文件支持 BDD 支持 分析器集成 线程并发可视化

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

【讨论】:

【参考方案6】:

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

【讨论】:

请附上链接的摘录。这是更好的 *** 体验并防止出现断链事件。【参考方案7】:

嗯,我已经设法制作了一个丑陋的工作黑客。 您必须在 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”的调用,以避免可怕的管道处理错误(c.f. https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13425768-allow-windows-programs-to-spawn-bash)

【讨论】:

如果您尝试此操作并收到错误:“Windows 找不到 'C:\Windows\System32\bash.exe'。请确保您输入了正确的名称,然后再试一次。”,请确保您正在以管理员身份运行 PyCharm。导航到安装目录(如果您使用的是 JetBrains 工具箱应用程序,则类似于 C:\Program Files (x86)\JetBrains\PyCharm 2016.1.2\binC:\Users\<USER>\AppData\Local\JetBrains\Toolbox\apps\PyCharm-P\ch-0\145.1504.1\bin),右键单击 pycharm.exepycharm64.exe,选择 PropertiesCompatibility ,然后勾选“以管理员身份运行此程序”。 我在尝试添加 bat 时收到来自 pycharm 的错误消息“无效的 python 解释器” 我尝试了很多不同的路径,我得到的只是env: ‘/Python27/python.bat’: No such file or directory

以上是关于让 PyC​​harm 在 windows linux 子系统上识别 python(windows 上的 bash)的主要内容,如果未能解决你的问题,请参考以下文章

如何让 PyC​​harm 从我的本地包存储库更新?

如何让 PyC​​harm 显示来自 pytest 的整个错误差异?

未解决的参考:PyCharm 中的“django”错误

PyCharm:自动对齐内嵌注释

如何强制 PyCharm 警告未声明的类型?

PyCharm - 社区版是不是能够突出显示 css/javascript?