Jak bezpośrednio uruchomić program w języku Python?

13

Jak bezpośrednio uruchomić program w języku Python?

Utworzyłem plik .py (powiedzmy mnik.py ) w gedit. Działa płynnie w terminalu.

Polecenie idzie

python3 mnik.py

Ale za każdym razem, gdy klikam plik, jest on otwierany za pomocą gedit. Nie mogę uruchomić go bezpośrednio, klikając.

Co robić?

Priyadarshi Paul
źródło
4
@kasperd Pisanie python3w wierszu polecenia za pomocą argumentu jest doskonałym sposobem na uruchamianie skryptów Pythona. Jest to w rzeczywistości najłatwiejszy sposób na uruchomienie programu, który wymaga terminala i argumentów (jak wiele moich własnych skryptów, ale także programów takich jak mercurial, sphinx). Chcesz wyjaśnić, dlaczego to, co robię od ponad 20 lat, nie jest właściwe?
Anthon
3
@kasperd Prawidłowo napisany skrypt (lub program) w języku Python nie musi mieć linii shebang. Jeśli tak nie jest, jest to pod każdym względem skrypt w języku Python. Skryptu tego nie można wykonać z poziomu powłok systemu Linux w skrócie, który wydaje się preferowany. Istnieją również środowiska, w których skrypty Pythona nie mają wcale linii shebang i pozwalają im uruchomić skrypt przez podwójne kliknięcie.
Anthon
1
@kasperd To, czego potrzebuje jądro, aby skrypt działał w Pythonie, ./scriptnamenie potwierdza twojego twierdzenia, że ​​uruchamianie skryptu z wiersza poleceń za pomocą python3. Istnieją różne sposoby uruchamiania skryptów Pythona, a wykonywanie python3 ./mnik.pyjest również właściwym sposobem działania, jest po prostu inne (a przynajmniej dostajesz w ten sposób python3, a nie python2, co jest bardziej prawdopodobne przy większości odpowiedzi do tej pory)
Anthon
1
Używanie <języka> <skrypt> jest całkowicie poprawnym i akceptowanym sposobem uruchamiania skryptu. Sugerowanie, że jest to zła praktyka, powinno być niezadowolone.
Jacob Vlijm

Odpowiedzi:

26

Potrzebne są dwie rzeczy.

  1. Skrypt musi mieć #!wiersz informujący system operacyjny, którego interpretatora użyć. W twoim przypadku musi być twoja pierwsza linia w kodzie#!/usr/bin/env python3
  2. Musisz otworzyć menedżera plików, przejść do Edycja -> Preferencje -> Zachowanie i wybrać, co zrobić z plikami wykonywalnymi

    wprowadź opis zdjęcia tutaj

    1. Na koniec upewnij się, że sam plik rzeczywiście ma ustawione uprawnienia do plików wykonywalnych. W terminalu możesz to zrobić, chmod +x /path/to/script.pyaw GUI kliknij plik prawym przyciskiem myszy i zmień jego Właściwości -> Uprawnienia

    wprowadź opis zdjęcia tutaj

    wprowadź opis zdjęcia tutaj

Uwaga na temat linii shebang

Pierwsza linia nazywa się linią shebang i musi zaczynać się od #!; cokolwiek będzie dalej, to nazwa tłumacza, który odczyta Twój kod. Jeśli używasz, python3możesz użyć jednego z nich #!/usr/bin/python3lub #!/usr/bin/env python3do przenoszenia. Jeśli nie używasz kodu, który będzie specyficzny dla wersji Pythona - po prostu użyj#!/usr/bin/env python

Uwaga na temat wyniku skryptu:

Jeśli skrypt wypisuje dane wyjściowe na konsolę, musi mieć okno terminala lub alternatywnie użyć okien dialogowych GUI, takich jak zenity. Preferuj użycie Run in Terminalopcji, jeśli chcesz zobaczyć kod. Jeśli chcesz, aby skrypt zrobił coś bez wyświetlania danych wyjściowych konsoli - użyj Runopcji.

wprowadź opis zdjęcia tutaj

Ponadto, jeśli masz parametry wiersza poleceń, takie jak sys.argv[1]w skrypcie, nie możesz ich ustawić, chyba że masz otwarte okno terminala.

Sergiy Kolodyazhnyy
źródło
1
@PriyadarshiPaul To samo co Filesprogram w programie uruchamiającym. W Windows- My Computer
Speak
@PriyadarshiPaul to nautilusw terminalu
grooveplex
3
#!/usr/bin/env pythonwywoła Python2 na większości systemów Ubuntu. Chociaż możesz zrobić skrypt napisany w języku Python dla Python3 zgodny z Python2, nie zakładam, że OP to zrobił. #!/usr/bin/env python3wydaje się bardziej odpowiedni shebang
Anthon
1
I dlaczego tutaj wprowadzamy Arch Linux? Może uznaję to za wredne, ale mówimy tutaj o Ubuntu. W Ubuntu domyślnie python jest połączony z python2.7. Jeśli tworzysz oprogramowanie, prawdopodobnie powinieneś wiedzieć, jakie linki, jeśli używasz czegoś innego niż domyślna wersja twojego systemu operacyjnego, to wyraźnie to zaznacz. Jasne, możemy odpowiedzieć na każde pytanie, ale na głośne wołanie - jeśli kodujesz, to zrób to dobrze.
Sergiy Kolodyazhnyy 24.04.16
3

Musisz umieścić lokalizację programu, aby wykonać swój kod w pierwszym wierszu, a następnie musisz ustawić skrypt, aby działał jako plik wykonywalny, zmieniając jego uprawnienia. Zakłada się, że uruchamiasz aplikacje z terminala lub innego skryptu.

Znajdź swoją instalację Python

$ which python
/usr/bin/python

Dodaj lokalizację programów do górnego wiersza programu z #!przodu

#!/usr/bin/python

# Python code goes here....

Ustaw skrypt języka Python, aby miał prawa wykonywania

$ chmod 700 test.py

Teraz możesz uruchomić skrypt bezpośrednio

$ ./test.py

Lista kodów dla test.py

#!/usr/bin/python

print "test"
Joseph
źródło
2

Jeśli chcesz uruchomić ten program bez wpisywania python3 mnik.py, musisz uruchomić skrypt i upewnić się, że python3jest on używany do jego uruchomienia.

Pierwsze, co możesz zrobić, uruchamiając

 chmod +x mnik.py

drugi możesz zrobić, dodając jako pierwszą linię skryptu linię shebang, która wywołuje python3 . We wszystkich systemach Ubuntu, z którymi współpracowałem, które były dostarczane z python3, możesz uzyskać python3, dodając tę ​​linię u góry:

#!/usr/bin/env python3

Po tych dwóch zmian można wpisać /path/to/mnik.py, ./mnik.pyalbo po prostu mnik.py(ten ostatni wymaga skryptu być w PATH).

Jeśli się te zmiany można również rozważyć zmianę nazwy mnik.pyna mnik, że powszechną praktyką jest z pakietów Pythona z poleceniami, które są publikowane na PyPI.

Anthon
źródło
ok, Żaden z nich teraz nie działa
Priyadarshi Paul
Co jest dobrze"? Do czego odnoszą się „te”?
Anthon
Mówi ** usr / bin / env: zły interpretator: Brak takiego pliku lub katalogu **
Priyadarshi Paul
/Z przodu jest przynajmniej brak. Wyjaśnij, co zawiera „To” w Twoim komentarzu. Czy to powłoka bash? Czy to jest Windows Command.com? Z czego wywołujesz program iz jaką składnią wiersza poleceń?
Anthon