2012-03-20 14 views
8

Czy moduły biblioteczne Python powinny zaczynać się od pythona o nazwie #!/usr/bin/env?Czy moduły biblioteczne Python powinny zaczynać się pytaniem #!/Usr/bin/env?

Patrząc na pierwsze linie *.py w /usr/share/pyshared (gdzie biblioteki Pythona są przechowywane w Debianie) okazuje się, że istnieją zarówno pliki, które zaczynają się od linii hashbang, jak i te, które jej nie zawierają.

Czy istnieje powód do uwzględnienia lub pominięcia tej linii?

+0

BTW czy coś jest nie tak z pytaniem '#! Python'? – Kos

+0

@Kos: tak, jest: nie działa. Przynajmniej nie wszędzie. '/ usr/bin/env' służy wyłącznie do przenoszenia. –

+1

A także dlatego, ponieważ lokalizacja rzeczywistego interpretera Python zmieni się, jeśli używasz virtualenv lub niektórych innych popularnych narzędzi. –

Odpowiedz

6

Powody, dla których niektóre pliki w /usr/share/pyshared zadeklarowały, że niektóre z nich nie są łatwe do wyjaśnienia. Pobierz pliki uno.py i pyinotify.py. Ten pierwszy nie ma nic wspólnego, a drugi ma.

  1. uno.py to moduł python, który zostanie zaimportowany i użyty w innych programach/skryptach. Dlatego nigdy nie zostanie wykonany bezpośrednio z wiersza poleceń.
  2. Z drugiej strony pyinotify.py zawiera shebang i widać, że zawiera następujący wiersz na dole (może to wykonane do pliku wykonywalnego, jeśli prowadzisz chmod u+x na nim):

    if __name__ == '__main__': 
        command_line() 
    

Możesz kodować binaria Pythona w shebangu, ale jak wspomnieli inni, użycie /usr/bin/env uczyni go bardziej przenośnym.

0

jeśli chcesz skrypt być wykonywalny, musisz włączyć tę linię

+1

Nie odpowiada to bezpośrednio na pytanie. Proszę poprawić swoją odpowiedź. – Tadeck

+0

Jeśli nie, czy istnieje powód, aby uwzględnić tę linię? Na najwyższym poziomie nie ma niczego wykonywalnego, tylko definicje. –

+6

-1. Ta odpowiedź jest niepoprawna. Linia ta jest używana do określenia tłumacza, a nie do "tworzenia skryptu i wykonywania". Ten ostatni osiąga się poprzez zmianę uprawnień do plików (w systemie UNIX). –

5

Ta linia to linia shebang. Aby uzyskać szczegółowe informacje, zapoznaj się z wikipedia article. Zasadniczo określa interpreter, z którym plik może zostać wykonany, jeśli zostanie bezpośrednio uruchomiony z wiersza poleceń.

Nie ma potrzeby uwzględniania tego wiersza na górze pliku, chyba że planujesz bezpośrednio uruchomić go z powłoki. Niektóre moduły Pythona (np. Ftplib) mają pewną funkcjonalność po ich bezpośrednim uruchomieniu. Będą one mieć linię #! na górze. Większość nie ma takiej funkcjonalności i dlatego nie potrzebuje tej linii.

Powiązane problemy