2016-05-03 23 views
27

Trong khi chạy các phiên bản Linux của python, pip, vv "nguyên bản" trên windows là tuyệt vời, tôi muốn làm như vậy bằng cách sử dụng một IDE thích hợp. Kể từ khi khả năng tương thích SSHD chưa được thực hiện, tôi đang cố gắng nhận được PyCharm để nhận ra Linux python như là một thông dịch viên địa phương.Bắt PyCharm nhận dạng python trên hệ thống con của windows linux (bash trên windows)

Sau khi cài đặt hệ thống con Windows Linux, gõ

bash -c python 

từ cửa sổ dòng lệnh sẽ thả bạn vào một vỏ python.

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

cũng hoạt động, sản xuất "hello world" làm đầu ra trong vỏ cửa sổ!

Tôi đang cố gắng để bọc này lên như một tập tin .bat và trình bày nó để PyCharm như một thông dịch viên địa phương, tức là

python.bat:

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

Nhưng tôi tiếp tục nhận được "các sdk có vẻ không hợp lệ "cho bất kỳ biến thể nào tôi thử. Vì tôi không chắc chắn chính xác những gì PyCharm đang làm để "xác nhận" SDK, điều này khó khắc phục.

+0

Did bạn thiết lập các đường dẫn cho python? – 123

+2

Xin lưu ý rằng đây không phải là một python điển hình trên cửa sổ cài đặt. Tôi đang cố gắng truy cập python trong hệ thống phụ linux của cửa sổ (xem https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux). Điều này không thể được giải quyết thông qua đường dẫn. –

+2

Có một yêu cầu tính năng mở cho điều này, bạn có thể làm theo nó (và bỏ phiếu): https://youtrack.jetbrains.com/issue/PY-19129 –

Trả lời

4

Vâng, tôi đã quản lý để tạo ra một hack làm việc xấu xí. Bạn sẽ phải cài đặt python-setuptools và pip theo cách thủ công trong hệ thống con Linux. Hãy chắc chắn để sử dụng phiên bản pip được cung cấp bởi PyCharm, bạn sẽ tìm thấy nó ở một con đường tương tự như:
C: \ Program Files (x86) \ JetBrains \ PyCharm 2016.1.2 \ helpers \ pip-7.1.0.tar. gz

sau đó thiết lập các kịch bản sau đây là "python.bat" dưới "c: \ Python" và điểm PyCharm đến nó như là một thông dịch viên:

@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 

Hãy tha thứ cho phong cách mã hóa khủng khiếp, như tôi đã không bao giờ thực sự phát triển các tập tin batch của Windows trước đây.

Bạn có thể phải tinh chỉnh cấu trúc thư mục để phù hợp với hệ thống của mình. Cũng lưu ý rằng đầu ra của bất kỳ tập lệnh python nào được gọi bởi Python.bat được chuyển đến một tệp tạm thời trong hệ thống con linux, sau đó gõ trở lại dưới cửa sổ. Đối với một số lý do, đường ống đầu ra của bash.exe qua cửa sổ gây ra lỗi.

Hy vọng điều này sẽ hữu ích.

UPDATE: Bọc cuộc gọi đến "bash" với "START" để tránh các lỗi xử lý ống khủng khiếp (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

Nếu bạn đã thử điều này và nhận được lỗi: "Windows không thể tìm thấy 'C: \ Windows \ System32 \ bash.exe'. Hãy chắc chắn rằng bạn đã gõ tên chính xác và sau đó thử lại.", Đảm bảo rằng bạn đang chạy PyCharm với tư cách Quản trị viên . Điều hướng đến thư mục cài đặt (ví dụ như 'C: \ Program Files (x86) \ JetBrains \ PyCharm 2016.1.2 \ bin' hoặc' C: \ Users \ \ AppData \ Local \ JetBrains \ Hộp công cụ \ apps \ PyCharm-P \ ch-0 \ 145.1504.1 \ bin' nếu bạn đang sử dụng ứng dụng hộp công cụ JetBrains), nhấp chuột phải vào 'pycharm.exe' hoặc' pycharm64.exe', chọn ** Thuộc tính **, ** Tính tương thích **, sau đó chọn "Chạy chương trình này với tư cách quản trị viên". – breandan

+0

Tôi nhận được thông báo lỗi "trình thông dịch python không hợp lệ" từ pycharm trong khi cố gắng thêm dấu dơi – user1946989

16

Sử dụng PyCharm với WSL Python trên Win10 Bắt đầu SSH

PyCharm chỉ có thể được cấu hình để sử dụng WSL Python như Remote Interpreter (đây là do thiếu API công cộng khác).

  • Cài đặt Win10 build 14361 hoặc cao hơn. Bạn cũng có thể nâng cấp Bản xem trước nội bộ hiện tại của mình.
  • Install WSL (cái gì đó như lxrun/install` & & lxrun/cập nhật)
  • Run bash.exe
  • Update để phiên bản mới nhất sudo apt-get update & & sudo apt-get upgrade
  • mở/etc/ssh/sshd_config
    • Bật xác thực mật khẩu (trừ khi bạn muốn sử dụng khóa chung). Mở/etc/ssh/sshd_config và đặt PasswordAuthentication là có.
    • Kể từ khi chroot không được thực hiện trong WSL (chưa), bạn cũng cần phải thiết lập UsePrivilegeSeparation không
    • Lưu và đóng nó
  • Loại sudo $ (sudo mà sshd) -d để chạy OpenSSH trên foreground (nó dễ dàng hơn nhiều để gỡ lỗi). Bạn sẽ thấy một cái gì đó như "Máy chủ nghe trên cổng 0.0.0.0 22"
  • Từ phiên bash.exe khác thử ssh 127.0.0.1
  • Nếu bạn thấy thông báo về in ngón tay ECDSA, hãy trả lời y. Bạn sẽ thấy lời nhắc mật khẩu. Nếu bạn thấy nó, thì máy chủ của bạn hoạt động chính xác.

  • Tắt tính năng này bằng CTRL + C và khởi động máy chủ ở chế độ daemon (sudo service ssh start). Hình như mới nổi được chia nhỏ trên WSL hiện tại, vì vậy bạn sẽ cần phải chạy bash.exe, bắt đầu sshd và giữ cửa sổ giao diện điều khiển được mở kể từ khi WSL dừng khi khách hàng cuối ngắt kết nối. Bạn có thể tạo tệp wsl_ssh.bat như bash.exe -c "sudo service ssh start & & & ngủ 999d" và sử dụng nó để khởi động ssh.

Cấu hình PyCharm PyCharm nên được cấu hình để sử dụng WSL làm phiên dịch từ xa, nhưng với hiện triển khai, vì mỗi ổ đĩa trên Windows được ánh xạ vào thư mục thích hợp trong/mnt/trong WSL. Vì vậy, bạn chỉ cần cấu hình ánh xạ. Đối với thông dịch viên từ xa, hãy xem https://www.jetbrains.com/help/pycharm/2016.1/configuring-remote-python-interpreters.html. Bạn nên sử dụng 127.0.0.1 làm tên máy chủ, và đăng nhập và mật khẩu bạn đã nhập sau khi lxrun/install đầu tiên. Bạn cũng nên đặt C: `to/mnt/c /` trong ánh xạ của bạn. Xem video từ bài trước.

Tác giả: Ilya Kazakevich
14 tháng 6 năm 2016, 17:20

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

+0

Đây phải là câu trả lời được chấp nhận – ThatAintWorking

0

Tôi muốn thêm câu trả lời của bmjjr bằng cách nói rằng đây là chỉ có sẵn với PyCharm Professional Edition .Tính năng Phiên dịch từ xa không có sẵn với các phiên bản cộng đồng, như tôi buồn bã phát hiện ra:

chỉ được hỗ trợ trong Professional Edition

  • Cython
  • Django
  • AppEngine
  • Flask
  • Jinja2
  • Mako
  • web2py
  • Pyramid
  • Profiler
  • SQLAlchemy
  • Sơ đồ
  • thông dịch từ xa, gỡ lỗi từ xa, Vagrant, Docker
  • đang Duplicate phát hiện
  • Mã bảo hiểm
  • file .po hỗ trợ
  • BDD hỗ trợ
  • hội nhập Profiler
  • Chủ đề Concurrency Visualization

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

Các vấn đề liên quan