【问题标题】:Getting PyCharm to recognize python on the windows linux subsystem (bash on windows)让 PyC​​harm 在 windows linux 子系统上识别 python(windows 上的 bash)
【发布时间】: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 工作所缺少的功能后得到解决,然后“远程解释器”设置应该可以工作。

标签: python pycharm windows-subsystem-for-linux


【解决方案1】:

通过 WSL 配置远程解释器#

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

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

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

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

使用 Anaconda:

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

使用 Pyhton: Adding a WSL interpreter

  1. 选择 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

          【讨论】:

          • 请附上链接的摘录。这是更好的 stackoverflow 体验并防止出现断链事件。
          【解决方案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\bin 或 C:\Users\<USER>\AppData\Local\JetBrains\Toolbox\apps\PyCharm-P\ch-0\145.1504.1\bin),右键单击 pycharm.exe 或 pycharm64.exe,选择 Properties、Compatibility ,然后勾选“以管理员身份运行此程序”。
          • 我在尝试添加 bat 时收到来自 pycharm 的错误消息“无效的 python 解释器”
          • 我尝试了很多不同的路径,我得到的只是env: ‘/Python27/python.bat’: No such file or directory
          猜你喜欢
          • 2013-09-26
          • 2021-01-29
          • 2016-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-10
          • 1970-01-01
          相关资源
          最近更新 更多