web-dev-qa-db-ja.com

PyCharmにpython windows linuxサブシステムで(windowsでbash)を認識させる

Linuxバージョンのpython、pipなどをWindowsで「ネイティブに」実行するのは素晴らしいですが、適切なIDEを使用して実行したいと思います。 SSHD互換性はまだ実装されていないので、PyCharmにLinux pythonをローカルインタープリターとして認識させようとしています。

Windows Linuxサブシステムをインストールした後、入力

bash -c python

windowsコマンドラインからpython Shell。

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

windowsシェルの出力として「hello world」を生成します!

これを.batファイルとしてまとめ、ローカルインタープリターとしてPyCharmに提示しようとしています。

python.bat:

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

しかし、試してみたバリエーションに対しては、「sdkが無効のようです」と表示され続けます。 PyCharmがSDKを「検証」するために何をしているのか正確にはわからないので、これを克服するのは難しいです。

37
Boaz Arad

WSLでのPyCharmの使用PythonSSHの開始

PyCharmは、WSL Pythonをリモートインタープリターとして使用するようにのみ設定できます(これは他のパブリックAPIがないためです)。

  • Win10ビルド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を設定する必要もあります。
    • 保存して閉じます
  • Sudo $(Sudo which sshd)-dと入力して、OpenSSHをフォアグラウンドで実行します(デバッグがはるかに簡単です)。 「0.0.0.0ポート22でリッスンしているサーバー」のようなものが表示されるはずです。
  • 別のbash.exeセッションからssh 127.0.0.1を試してください
  • ECDSA指紋に関するメッセージが表示された場合は、yと答えてください。パスワードプロンプトが表示されます。表示される場合、サーバーは正常に動作しています。

  • CTRL + Cでオフにし、デーモンモードでサーバーを起動します(Sudo service ssh start)。現在のWSLではupstartが壊れているように見えるため、最後のクライアントが切断されたときにWSLが停止するため、bash.exeを実行し、sshdを起動し、コンソールウィンドウを開いたままにする必要があります。 bash.exe -c "sudo service ssh start &&& sleep 999d"のようなwsl_ssh.batファイルを作成し、それを使用してsshを起動できます。

PyCharmの構成PyCharmは、WSLをリモートインタープリターとして使用するように構成する必要がありますが、Windowsの各ドライブはWSLの/ mnt /の適切なフォルダーにマップされるため、展開は不要です。したがって、マッピングを構成するだけで済みます。リモートインタープリターについては、 https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html を参照してください。ホスト名として127.0.0.1を使用し、最初のlxrun/installの後に入力したログインとパスワードを使用する必要があります。また、マッピングでC: `を/ mnt/c /`に設定する必要があります。以前の投稿のビデオをご覧ください。

著者:イリヤ・カザケビッチ
2016年6月14日、17:20

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

31
Bob Jordan

ほとんどのソリューションを試してみましたが、主な問題は、Windows上のOpenSSHをJetBrainsが推奨する7.5未満にダウングレードできないことです。

幸いなことに、彼らはこの問題を解決してくれました! Pycharm 2018.3の早期アクセスバージョンをダウンロードしました

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

enter image description here

9
bitwhys

これがPyCharm Professional Editionでのみ使用可能であると述べて、bmjjrの答えを追加したいと思います。残念ながら、Community Editionではリモートインタープリター機能を使用できません。

Professional Editionでのみサポート

  • シトン
  • Django
  • AppEngine
  • Flask
  • ジンジャ2
  • マコ
  • web2py
  • ピラミッド
  • プロファイラー
  • SQLAlchemy
  • リモートインタープリター、リモートデバッグ、Vagrant、Docker
  • 重複コード検出
  • コードカバレッジ
  • .poファイルのサポート
  • BDDサポート
  • プロファイラーの統合
  • スレッドの同時実行の可視化

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

4
jonathan

リモートintを介してサポートされます。最後のコメントを参照してください: https://youtrack.jetbrains.com/issue/PY-19129

4
user996142

まあ、私はmanagedい作業ハックを生成することができました。 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の下に入力されます。何らかの理由で、bashの出力をパイプしますWindows経由の.exeはエラーを引き起こします。

お役に立てれば。

更新:ひどいパイプ処理エラー(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

WSL経由でリモートインタープリターを構成する

  1. いずれかの方法で、Add Python Interpreterダイアログを開きます。

    • エディターを使用している場合、最も便利な方法は、ステータスバーでPython Interpreterウィジェットを使用することです。ウィジェットをクリックし、[インタープリターの追加...].

    • [設定/環境設定]ダイアログ(Ctrl + Alt + S)を使用している場合は、[プロジェクト]、[プロジェクト通訳。 プロジェクトインタープリターの構成 アイコンをクリックし、[追加]を選択します。

  2. ダイアログの左側のペインで、WSLをクリックします。

    Anacondaを使用します。

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

    Pyhtonを使用: WSLインタープリターの追加

  3. Linuxディストリビューションを選択し、選択したLinuxディストリビューションのpython実行可能ファイルへのパスを指定します。

完了すると、新しいインタープリターがプロジェクトに追加され、デフォルトの mnt mappings が設定されます。

新しく追加されたWSLインタープリター

WSLでは仮想環境を作成できないことに注意してください。インストールするすべてのパッケージは、対応するシステムインタープリターに追加されます。 Sudoパスワードの入力を求められます。

Sudoパスワードの入力

参照: JetBrains

0
Islam Mansour

私は通常のリモートsshインタープリター「古い方法」を使用しました このリンクで

私は このガイド を使用しました:クリティカル- this で解決された認証エラーが発生していました:

0
user2673238