Uruchamianie `#! / Usr / bin / env python` w systemie Windows

14

Używam Bash na Windowsie, dostarczonym przez MSYS.

Próbowałem uruchomić plik Python z shebang #!/usr/bin/env python, ale pojawia się ten komunikat o błędzie:

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

Co mogę zrobić, aby to zadziałało?

Wiem, że mogę uruchomić plik Python, dodając do niego sufiks python, ale chcę, aby działał również bez sufiksu.

Ram Rachum
źródło

Odpowiedzi:

8

Zamiast tego użyj właściwej ścieżki, w której jest zainstalowany Python, na przykład:

#!c:/Python/python.exe

Jeśli masz w systemie obsługę ścieżek uniksopodobnych (nie znam MSYS), zawsze możesz wprowadzić ścieżkę do pythonpliku wykonywalnego, tj. Wyjścia which python.

Daniel Beck
źródło
2
Lub możesz użyć env, tak jak pytający.
Ignacio Vazquez-Abrams
Nie mogę zmienić shebang, jest to część projektu, w który zaangażowani są inni programiści pracujący w systemach Linux i Mac.
Ram Rachum,
@RamRachum Co znajduje się wyjście which envi which pythoni type python?
Daniel Beck
0

Co się stanie po uruchomieniu (z powłoki):

$ /usr/bin/env python

..?

Jeśli rozpocznie interaktywną sesję Pythona, można go znaleźć. (Możesz także po prostu uruchomić:) type python. Jeśli drukuje „nie ma takiego pliku lub katalogu”, pythonto nie znajduje się w ŚCIEŻCE. Sprawdź, czy można poprawić następujące elementy, aby rozwiązać problem (spacje w ścieżce / do / python prawdopodobnie spowodują problemy):

$ export PATH=$PATH:/path/to/python
$ /usr/bin/env python
Michał
źródło
0

Okazało się, że istnieje rozbieżność między activate.shplikiem Virtualenv a MSYSGIT. Nigdy nie miał działać w systemie Windows.

Ram Rachum
źródło
0

Najnowsze wersje systemu Windows 10 obsługują instalowanie podsystemów Linux. Jeśli uciekniesz stamtąd, ścieżki powinny być poprawne.

Powinno to być działające rozwiązanie, jeśli nie masz nic przeciwko temu.

Gryf
źródło
0

Przyczyną problemu jest to, że spacje w shebangach są interpretowane jako dostarczające dodatkowe argumenty do pliku wykonywalnego, więc C:\Program Files\Python\python.exesą postrzegane jako C:\Programpodane Files\Python\python.exejako argument.

Najlepszym rozwiązaniem tego jest, ponieważ Windows LOVES spacje w $HOMEkatalogu i Program Filesinnych miejscach, nawet jeśli naprawdę może to popsuć w cmd.exe oraz Powershell i innych narzędziach:

Zainstaluj Python C:\Pythoni dodaj C:\Pythonfolder, w którym python.exemieszka, oraz Scriptskatalog, który w nim mieszka, do PATHzmiennej środowiskowej na poziomie systemu lub użytkownika.

Jeśli potrzebujesz Python 2.7.x 3.x współistnieć, zainstalować je C:\Python27i C:\Python36i C:\Python37i zmienić nazwę python.exena python2.exe, python36.exe, python37.exe, etc i dodać każdy z tych folderów i ich Scriptsfoldery do PATH. Możesz określić, która z wersji Pythona 3 ma być „domyślna”, a także wykonać kopię w tym folderze, python3.exeaby obsłużyć wszystkie używane skrypty !#/usr/bin/env python3.

Jeśli w katalogu domowym użytkownika znajduje się spacja, mogą wystąpić problemy, jeśli użyjesz pip install --user somepackageskładni. W --userdomyślnie do katalogu domowego, a przestrzeń wyłączy się, co w tym przypadku również. To obejście jest opisane tutaj, ale sprowadza się do wyeksportowania PYTHONUSERBASE do twojego środowiska.

export PYTHONUSERBASE=/myappenv
pip install --user SomePackage

lub w systemie Windows (Powershell):

$env:PYTHONUSERBASE='C:\PythonPkgs'
pip install --user SomePackage
dragon788
źródło