Làm cho `#! / Usr / bin / env python` hoạt động trên Windows


14

Tôi sử dụng Bash trên Windows, được cung cấp bởi MSYS.

Tôi đã cố chạy một tệp Python với một shebang #!/usr/bin/env python, nhưng tôi nhận được thông báo lỗi này:

/usr/bin/env: python: No such file or directory

Tôi có thể làm gì để thực hiện công việc này?

Tôi biết tôi có thể khởi chạy tệp Python bằng cách thêm vào nó python, nhưng tôi muốn nó hoạt động mà không có hậu tố.

Câu trả lời:


8

Sử dụng đường dẫn thích hợp nơi Python được cài đặt thay thế, ví dụ:

#!c:/Python/python.exe

Nếu bạn có hỗ trợ đường dẫn giống Unix trên hệ thống của mình (tôi không quen với MSYS), bạn luôn có thể nhập đường dẫn đến pythontệp thực thi của mình , tức là đầu ra của which python.


2
Hoặc bạn có thể sử dụng env, như người hỏi đang làm.
Ignacio Vazquez-Abrams

Tôi không thể thay đổi shebang, đó là một phần của dự án liên quan đến các lập trình viên khác làm việc trên Linux và Mac.
Ram Rachum

Là @RamRachum gì đầu ra của which envwhich pythontype python?
Daniel Beck


0

Điều gì xảy ra khi bạn chạy (từ vỏ):

$ /usr/bin/env python

..?

Nếu nó bắt đầu một phiên python tương tác, thì python có thể được tìm thấy. (Bạn cũng có thể chỉ cần chạy type python:). Nếu nó in "không có tệp hoặc thư mục như vậy" thì pythonsẽ không được tìm thấy trong PATH của bạn. Xem nếu điều sau đây có thể được điều chỉnh để khắc phục sự cố (khoảng trắng trong đường dẫn / đến / python có thể sẽ gây ra sự cố):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python

0

Tôi hóa ra là không khớp giữa activate.shtệp của Virtualenv và MSYSGIT. Nó không bao giờ có ý định làm việc trên Windows.


0

Các phiên bản mới nhất của Windows 10 hỗ trợ cài đặt các hệ thống con Linux. Nếu bạn chạy từ đó đường dẫn phải chính xác.

Nó sẽ là một giải pháp làm việc nếu bạn ổn với việc chạy nó theo cách đó.


0

Nguyên nhân của vấn đề là các khoảng trắng trong shebang được hiểu là cung cấp các đối số bổ sung cho một tệp thực thi, do đó C:\Program Files\Python\python.exeđược xem như C:\Programđược đưa ra Files\Python\python.exedưới dạng đối số.

Giải pháp tốt nhất cho việc này, bởi vì Windows LOVES không gian trong $HOMEthư mục Program Filesvà các nơi khác mặc dù nó thực sự có thể phá vỡ mọi thứ trong cmd.exe và Powershell và các công cụ khác, là:

Cài đặt Python vào C:\Pythonvà thêm C:\Pythonthư mục nơi python.exesống và thư mục Scriptssống bên trong nó vào PATHbiến môi trường của bạn ở cấp độ hệ thống hoặc người dùng.

Nếu bạn cần Python 2.7.x và 3.x để cùng tồn tại, cài đặt chúng vào C:\Python27C:\Python36C:\Python37và đổi tên python.exeđể python2.exe, python36.exe, python37.exe, vv và thêm mỗi của các thư mục và họ Scriptsthư mục vào PATH. Bạn có thể muốn xác định phiên bản Python 3 nào bạn muốn là "mặc định" và cũng tạo một bản sao trong thư mục đó python3.exeđể xử lý bất kỳ tập lệnh nào sử dụng !#/usr/bin/env python3.

Nếu thư mục nhà người dùng của bạn có một khoảng trắng trong đó, bạn cũng có thể gặp sự cố nếu bạn sử dụng pip install --user somepackagecú pháp. Mặc --userđịnh cho thư mục nhà của bạn và không gian cũng sẽ tăng mọi thứ trong trường hợp này. Cách giải quyết được mô tả ở đây nhưng tập trung vào việc xuất PYTHONUSERBASE sang môi trường của bạn.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

hoặc trong Windows (Powershell):

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.