Tujuan #! / Usr / bin / python3

160

Saya perhatikan ini dalam beberapa bahasa scripting, tetapi dalam contoh ini, saya menggunakan python. Dalam banyak tutorial, mereka akan mulai dengan #!/usr/bin/python3di baris pertama. Saya tidak mengerti mengapa kita memiliki ini.

  • Seharusnya sistem operasi tidak tahu bahwa itu adalah skrip python (jelas itu sudah diinstal karena Anda membuat referensi untuk itu)
  • Bagaimana jika pengguna menggunakan sistem operasi yang tidak berbasis unix
  • Bahasa dipasang di folder yang berbeda untuk alasan apa pun
  • Pengguna memiliki versi yang berbeda. Terutama ketika itu bukan nomor versi lengkap (Seperti Python3 vs Python32)

Jika ada, saya bisa melihat ini melanggar skrip python karena alasan yang tercantum di atas.

KayleL
sumber
stackoverflow.com/questions/2429511/…
Ciro Santilli 郝海东 冠状 病 六四 事件 事件 法轮功
9
Saya sampai pada pertanyaan ini hanya untuk menyalin string shebang.
omerjerk

Jawaban:

260

#!/usr/bin/python3adalah garis shebang .

Garis shebang menentukan di mana penerjemah berada. Dalam hal ini, python3juru bahasa terletak di /usr/bin/python3. Sebuah peristiwa garis juga bisa menjadi bash, ruby, perlatau interpreter setiap scripting bahasa lain, misalnya:#!/bin/bash .

Tanpa garis shebang, sistem operasi tidak tahu itu adalah skrip python, bahkan jika Anda mengatur bendera eksekusi pada skrip dan menjalankannya seperti ./script.py. Untuk membuat skrip berjalan secara default di python3, panggil itu sebagai python3 script.pyatau setel baris shebang.

Anda dapat menggunakan #!/usr/bin/env python3portabilitas di seluruh sistem yang berbeda jika penerjemah bahasa diinstal di lokasi yang berbeda.

Jin
sumber
9
Jadi #! /usr/bin/env python3harus dipilih #! /usr/bin/python3?
winklerrr
4
@winklerrr Ya, ini lebih banyak digunakan.
MerreM
20

Itu disebut hash-bang. Jika Anda menjalankan skrip dari shell, itu akan memeriksa baris pertama untuk mencari tahu program apa yang harus dimulai untuk menafsirkan skrip.

OS berbasis non Unix akan menggunakan aturannya sendiri untuk mencari tahu cara menjalankan skrip. Windows misalnya akan menggunakan ekstensi nama file dan# akan menyebabkan baris pertama diperlakukan sebagai komentar.

Jika jalur ke eksekusi Python salah, maka secara alami skrip akan gagal. Sangat mudah untuk membuat tautan ke executable aktual dari lokasi apa pun yang ditentukan oleh konvensi standar.

Mark tebusan
sumber
12

Baris ini membantu menemukan program yang dapat dieksekusi yang akan menjalankan skrip. Notasi shebang ini cukup standar di sebagian besar bahasa scripting (setidaknya seperti yang digunakan pada sistem operasi dewasa).

Aspek penting dari baris ini adalah menentukan penerjemah mana yang akan digunakan. Pada banyak distribusi Linux yang berpusat pada pengembangan, misalnya, adalah normal untuk memiliki beberapa versi python diinstal pada saat yang sama.

Python 2.x dan Python 3 tidak 100% kompatibel, jadi perbedaan ini bisa sangat penting. Jadi #! /usr/bin/pythondan #! /usr/bin/python3tidak sama (dan juga tidak sama #! /usr/bin/env python3dengan yang disebutkan di tempat lain di halaman ini).

zxq9
sumber
6
  1. Dan garis ini caranya .

  2. Itu diabaikan.

  3. Ini akan gagal dijalankan, dan harus diubah untuk menunjuk ke lokasi yang tepat. Atauenv harus digunakan.

  4. Ini akan gagal dijalankan, dan mungkin gagal dijalankan di bawah versi yang berbeda.

Ignacio Vazquez-Abrams
sumber
3

Untuk memperjelas cara kerja garis shebang untuk windows, dari dokumen 3.7 Python :

  • Jika baris pertama file skrip dimulai dengan #!, Ini dikenal sebagai baris "shebang". Linux dan sistem operasi mirip Unix lainnya memiliki dukungan asli untuk baris tersebut dan biasanya digunakan pada sistem tersebut untuk menunjukkan bagaimana skrip harus dijalankan.
  • Peluncur Python untuk Windows memungkinkan fasilitas yang sama digunakan dengan skrip Python di Windows
  • Untuk memungkinkan garis shebang dalam skrip Python menjadi portabel antara Unix dan Windows, peluncur mendukung sejumlah perintah 'virtual' untuk menentukan penerjemah mana yang akan digunakan. Perintah virtual yang didukung adalah:
    • / usr / bin / env python
      • Bentuk / usr / bin / env dari garis shebang memiliki satu properti khusus lebih lanjut. Sebelum mencari interpreter Python yang terinstal, formulir ini akan mencari PATH yang dapat dieksekusi untuk dieksekusi Python. Ini sesuai dengan perilaku program enix Unix, yang melakukan pencarian PATH.
    • / usr / bin / python
    • / usr / local / bin / python
    • ular sanca
boardtc
sumber
2

Sebenarnya penentuan jenis file apa file sangat rumit, jadi sekarang sistem operasi tidak bisa hanya tahu. Itu bisa membuat banyak tebakan berdasarkan -

  • perpanjangan
  • ISK
  • PANTOMIM

Tetapi baris perintah tidak mengganggu dengan semua itu, karena itu berjalan pada lapisan yang kompatibel dengan backwards terbatas, sejak omong kosong mewah itu tidak berarti apa-apa. Jika Anda mengklik dua kali dengan pasti, OS modern dapat mengetahui hal itu - tetapi jika Anda menjalankannya dari terminal maka tidak, karena terminal tidak peduli dengan API pengetikan file khusus OS Anda.

Mengenai poin lainnya. Ini kenyamanan, mungkin juga untuk dijalankan

python3 path/to/your/script

Jika python Anda tidak ada di jalur yang ditentukan, maka itu tidak akan berfungsi, tetapi kami cenderung menginstal hal-hal untuk membuat hal-hal seperti ini berfungsi, bukan sebaliknya. Sebenarnya tidak masalah jika Anda di bawah * nix, terserah Anda apakah akan mempertimbangkan baris ini karena itu a shellcode. Jadi misalnya Anda bisa berjalan di bashbawah Windows.

Anda benar-benar dapat menghilangkan baris ini sepenuhnya, itu hanya berarti penelepon harus menentukan juru bahasa. Juga jangan letakkan juru bahasa Anda di lokasi yang tidak standar dan kemudian coba panggil skrip tanpa menyediakan juru bahasa.

awiebe
sumber