Uruchamianie skryptu python z terminala bez rozszerzenia .py

14

Chcę wywołać skrypt python script.py z terminala, po prostu wpisując skrypt . czy to możliwe? Jeśli tak to jak?

Wiem, że mogę uniknąć pisania python script.py poprzez dodanie #! / Usr / bin / env python na górze skryptu, ale nadal muszę dodać sufiks .py , aby uruchomić skrypt.

jmau5
źródło

Odpowiedzi:

21

Systemy plików Unix / Linux nie polegają na rozszerzeniach, tak jak Windows. Do .pyuruchomienia pliku nie trzeba go używać na końcu pliku.

Możesz uruchomić plik, wywołując go za pomocą interpretera:

python ScriptFile

Lub zaznaczając plik wykonywalny i definiując interpreter w pierwszym wierszu (np #!/usr/bin/python.).

Jeśli nie możesz wykonać pliku za pomocą:

/Path/to/ScriptFile

sprawdź uprawnienia za pomocą

ls -l ScriptFile

Być może trzeba dodać flagę wykonywalną chmod, aby została ona wykonana za Ciebie.

Jeśli regularnie używasz niestandardowych skryptów, możesz upewnić się, że katalog, w którym je przechowujesz, jest dodany do PATHzmiennej środowiskowej.

Patrick
źródło
1
Plik znajduje się w ~ / workspace / python. Dodałem ~ / workspace / python do mojej ścieżki, uruchomiłem sudo chmod a + x script.py "i dodałem linię shebang (#! / Usr / bin / env python) na początku skryptu Mogę uruchomić skrypt, wpisując * script.py , ale sam skrypt nie działa
jmau5
2
W unix / linux wszystko jest plikiem i odpowiada na jego nazwę. Nie można wywoływać Script.py jako skryptu. Spróbuj zmienić nazwę pliku ze script.py na skrypt, a powinno to rozwiązać problem.
Patrick
Przepraszam, źle zrozumiałem! Wszystko rozwiązane, dzięki!
jmau5
5

.pyRozszerzenie jest konieczne dla wykonywania skryptu. Musisz tylko wykonać skrypt (np. Uruchamiając chmod a+x script) i dodać linię shebang ( #!/usr/bin/env python).

Daniel Kullmann
źródło
Zobacz mój komentarz do odpowiedzi Patricka.
jmau5
4

Opcjonalnie możesz utworzyć opakowanie dla skryptu ( .pypliku):

Na przykład masz skrypt, runme.pydzięki czemu możesz utworzyć nowy plik runmedo zawinięcia skryptu:

#!/usr/bin/env python
import runme

a następnie wywołać runme.pyfunkcjonalność, po prostu wywołując runmepowłokę.

Jest to przydatne w przypadku skryptów wieloplatformowych, ponieważ na platformie Windows można przypisać .pypliki, które mają być wywoływane tylko według nazwy bez rozszerzenia i shebang w nagłówku, ale na platformie Linux nie można tego zrobić, a zatem opakowanie jest wyświetlane.

wieża
źródło