Neden Linux'ta Python #! / Usr / bin / python satırını gerektiriyor?


50

Oldukça basit bir soru: Linux'ta neden Python bu satırı gerektiriyor?

#!/usr/bin/python

python dosyasının başında, Windows yok mu?

Bu ne işe yarıyor? Çünkü "Python Linkleri" açıklaması biraz belirsizdir ...


28
Aşağıdaki cevapların hepsi doğrudur, hiçbiri Windows’un neden bu satıra ihtiyaç duymadığını ele almamaktadır. Windows, .ne tür bir dosya olduğunu belirlemek için dosyanın uzantısına (sonraki bölüm ) bağlıdır . Windows bile bundan uzaklaşıyor: Microsoft Word dosyasının ilk birkaç satırını inceleyin ve aslında bir Microsoft Word dosyası olduğunu belirtir.
Charles Green

9
Odadaki fil, python 2 ve 3 ile uyumlu olmadıkça ASLA / usr / bin / python kullanmamanız gerektiğidir. Sebep: arch, PSF tarafından kendilerinin önerdiği bir hareket olan python3'e bağlar.
Yine Başka Bir Kullanıcı

5
Bu ima, ancak bunun altında cevaplarında açıkça belirtilmediği değil bu zorunlu değildir . Senaryoyu sadece kendi adından çalıştırmak istiyorsanız bu gereklidir. Bunun python myscript.pyyerine her zaman çalıştırabilirsiniz .
Chris H

3
@CharlesGreen pencerelerin neden olmadığını bilmemeliyiz ;-) bu kadar SO.
Rinzwind

2
@YetAnotherUser Python 3'ün piyasaya sürülmesinden bu yana altı yıl on bir ay geçti, bu noktada insanların varsayılan 3’e göre daha iyi olacağını ve gerektiğinde 2’nin kullanımını açıkça belirttiklerini düşünüyorum.
JAB

Yanıtlar:


58

Python'un Linux'ta özel bir gereksinimi yoktur. Bu var program yükleyici denir olarak, "shebang" satırını kullanır Unix / Linux üzerinde. Bu aslında bir sınırlamadan ziyade bir özelliktir, ancak bunu bir dakika içinde alacağız. "Shebang" konusundaki Wiki sayfasında daha fazla ayrıntı var, ancak Windows ile karşılaştırmanın yanı sıra genel bir bakış sunmaya çalışacağım.

İlk olarak, Windows'daki duruma bakalım:

  • Bir dosyayı açmaya veya çalıştırmaya çalıştığınızda, Windows ilk önce bu dosyanın uzantısını inceler . Bu, dosya adının sondan başlamasıdır .. Python dosyalarında, bu genellikle .py.
  • Windows, dosya uzantısına göre ne yapılması gerektiğini arar.
    • Bu bilgiler Windows kayıt defterine kaydedilir; Python yüklendiğinde, genellikle o Windows'a bildirir .pydosyaları Yeni yüklenen kullanılarak açılmalıdır uygulama Python (Python yorumlayıcısı yani).
    • Birkaç dosya türünde yerleşik davranışlar vardır; örneğin, yürütülebilir dosyalar (Python yorumlayıcısının kendisi gibi) sona ermelidir .exeve .batdosyalar Windows toplu komut dosyaları olarak yürütülür.
    • Belirli bir dosya türü için gerçekleştirilen eylem özelleştirilebilir . Örneğin, Windows'a .pydosyaları kullanmak yerine çalıştırmak yerine, python.exebunları metin düzenleyici gibi başka bir programla açması gerektiğini söyleyebilirsiniz notepad.exe.
      • Bu durumda, bir Python betiği çalıştırmak için, elle çağırmanız python <scriptname>.py(veya .batbunu sizin için yapmak için bir dosya yazmanız) gerekir.

Şimdi, Python betiğinin üstünde bir shebang satırı ( #!/usr/bin/pythonveya #!/usr/bin/env python) varsa ne olur ? Çünkü Eh, #Python bir açıklama satırıdır, Python yorumlayıcısı sadece göz ardı eder. Bu, Unix / Linux dünyasında kullanılan betik dillerinin çoğunun #yorum satırlarını başlatmak için kullanmasının bir nedenidir .

Bu nedenle, Windows'un #!çizgiye "ihtiyacı olmadığını" söylemek biraz yanıltıcıdır ; , Windows gelmez bakınız#! çizgi ve aslında ne yapması gerektiğini söylemeye dosya uzantısı dayanır. Bunun birkaç dezavantajı var:

  • Sen gerekir ile Python isim .pybunları otomatik gibi tanınır olması için sonunda.
  • Python2 komut dosyalarını Python3 komut dosyalarından ayırmanın kolay bir yolu yoktur.
  • Daha önce belirtildiği gibi, .pydosya türü için varsayılan başlatma davranışını değiştirirseniz , Windows artık bu komut dosyalarını Python ile otomatik olarak çalıştırmaz. Bunun istemeden yapılabileceğini unutmayın.

Şimdi Unix / Linux'un scriptleri nasıl başlattığına bakalım:

Unutulmaması gereken ilk şey, Windows’un aksine Unix / Linux’un Python komut dosyalarını en azından kavramsal olarak “açmaya” çalışmadığıdır; İşletim sistemi komut dosyasının "execute bit" (bu yanıtın kapsamı dışında olan) adı verilen bir şey nedeniyle çalıştırılabilecek bir şey olduğunu biliyor . Böylece, yanlışlıkla yazmak #!/usr/bin/pthonyerine #!/usr/bin/python, bu metni içeren bir hata mesajı alırsınız:

/usr/bin/pthon: bad interpreter: No such file or directory.

"Tercüman" kelimesi bize shebang hattının rolü hakkında bir ipucu verir (teknik olarak belirtilen program tercüman, örneğin catbir metin editörü gibi başka bir şey olabilir ). Bir dosyayı çalıştırmayı denediğinizde, burada ne olur:

  • Unix / Linux program yükleyicisi, o dosyanın ilk iki baytına bakar; bu iki bayt ise #!, yükleyici , dosya içeriğini bir komut dosyası olarak çalıştıracak bir tercüman başlatmak için shebang satırının kalanını (shebang'ın kendisi hariç) bir komut olarak yorumlar .
  • Program yükleyici o besleyen, belirtilen tercüman başlattı yolunu bağımsız değişken olarak orijinal dosyanın.

Bunun birkaç avantajı var:

  • Senaryo yazarı hangi tercümanın kullanılacağı konusunda daha fazla kontrole sahiptir (Python2 / Python3 sorununu çözer) ve bazen tercümana ekstra bir argüman iletebilir (ayrıntılar için Wiki sayfasına bakınız).
  • Komut dosyasının dosya adı yoksayılır , böylece Python komut dosyalarına istediğiniz herhangi bir adı verebilirsiniz.

Son olarak, Unix / Linux'un bir Python betiği çalıştırmak için shebang hattına ihtiyacı olmadığını unutmayın . Shebang hattının gerçekte yaptığı tüm işlemleri program yükleyicinin bir tercüman seçmesine izin vermek olduğunu hatırlayın . Ancak Windows'ta olduğu gibi bu da elle yapılabilir:

python <myscript>

1
Windows'ta kolayca .py2ve .py3Python 2 / Python 3 komut dosyaları için uzantıları olabilir . Bu yüzden hem Linux (+ x bit) hem de Windows (dosya uzantısı) dosya sisteminde meta verilere ihtiyaç duyar. En büyük fark + x bitinin taşıma sırasında daha kolay kaybolmasıdır. Bu mutlaka bir dezavantaj değildir.
MSalters

1
@ MSalters Yürütme biti, içinde kodlanmış çok daha az bilgiye sahiptir. Ayrıca, belirli bir sistemde birden fazla Python2 tercümanınız olabileceğini unutmayın (daha önceki bir işimde Ruby ve diğer dillerle benzer bir durum vardı); shebang hattıyla bununla baş etmek neredeyse önemsizdir, oysa Windows'taki durum daha az izlenebilir hale gelir, daha fazla benzer dosya türünü yönetmeye çalıştığınızda.
Kyle Strand

Ayrıca, uzantı gerçekten "meta veriler" olarak sayılıyor mu? Bu sadece dosya adının bir parçası.
Kyle Strand

1
Bir dosyanın meta verileri tüm dosya adını, oluşturma süresini, erişim bitlerini vb. İçerir. Yalnızca içeriğin kendisi meta veriler yerine verilerdir. "Birden çok tercüman" söz konusu olduğunda, bu gerçekten gerçek bir sorundur ve tam olarak neden Shebang hattında olmamalıdır . Ya varsa /usr/bin/i686/pythonve /usr/bin/amd64/python? Mükemmel derecede mantıklı, ancak üzerinde kodlanmış bir varsayımın olduğu python scriptlerini kırar /usr/bin/python. Tercüman seçimi, senaryo yazarı değil, komut kullanıcısı seçimidir. Komut yazarı yalnızca dili (lehçesi) seçer.
MSalters

1
@ MSKALTERLER Eh, /usr/bin/envenv kurulum komut dosyaları ile birlikte, bunun için. Bunun Windows sürümü nedir? İstediğiniz tercümanı aldığınızdan emin olmak için regeditbir .pydosyayı başlatmadan hemen önce bir komut dosyası çalıştırmak ?
Kyle Strand

41

Belirttiğiniz satır, bilgisayara dosyayı / komut dosyasını doğrudan çalıştırırken hangi programı / tercümanı kullanacağını ve komut dosyası çalışırken bu programa iletilmesi gereken herhangi bir argümanı anlatmak için kullanılır. Bununla birlikte, bu, Python'un bir gereği değildir, eğer betiği doğrudan çalıştırmayı düşünüyorsanız (ve aşağıdaki sözdizimiyle Python'a geçirmeyin) linux çekirdeğinin / sisteminin bir gereğidir.

Eğer yürütecek python script.pyveya benzeri bir şey yapmanıza gerek yok . Yalnızca komut dosyasını / dosyayı, tercüman kullanmadan (örneğin python) kullanmadan doğrudan çalıştırmayı düşünüyorsanız .


Bash senaryosu için şöyle bir şey olurdu:

#!/bin/bash [optional Bash arguments]
# Bash script code here
...
exit 0;

Bu, sisteme, bu çalıştığında, sistemdeki /bin/bashkabukları / kabuk komut dosyası dillerinden biri olan üzerinden çalışması gerektiğini belirtir.


Python kodu için, burada, çalıştırılabilir dosyanın Python üzerinden çalıştırılmasını isteyeceksinizdir, böylece hangi tercümanı çalıştırmayı düşündüğünüzü söylersiniz.

#!/usr/bin/python [optional Python arguments]
# Python code here
...
exit()

Bu, Bash için olduğu gibi, /usr/bin/pythonkullanılması gerektiğini gösterir (bireysel sistem konfigürasyonlarınıza bağlı olarak bu muhtemelen Python 2 veya Python 3'tür).


Bu şekilde, Çalıştırabileceğiniz ./filename.pyya ./executableya ./scripttorundoğrudan.

Başlangıçta bu satır olmasaydı ve dosya / komut dosyasını çalıştırılabilir olarak ayarladığınızı ve bir Python komut dosyasıyla çalıştığınızı varsayarsak python filename.py, #!/usr/bin/pythonsatırınız olmasaydı koşmanız ya da benzeri bir işlem yapmanız gerekir . (Bir Bash betiği için, bash script.shPerl, Ruby, vb. Gibi diğer betikler / diller için yapmanız veya benzer yapmanız gerekir .)

Yukarıda vurgulanan sözdizimi, her bir bölümde dile özgü olmamasına rağmen, dile özgüdür.


1
Eklemek için ilginç bir şey tercüman (doğrudan çağrılmış gibi aynı şekilde vakaların çoğunda, shebang kendisi sonra ek parametrelerini belirlemek mümkün olurdu #!/bin/bash -x, #!/usr/bin/perl -lanvs.).
kos

7
@kos: Biri (gereken) /usr/bin/env pythondoğru pitonu elde etmek için kullanıldığında PITA olan tam bir ekstra argüman belirleyebileceğinizi düşünüyorum .
unperson325680

@progo Sorunun ne olduğundan emin değilsiniz env, ancak problem argüman sayısı gibi görünmüyor : #!/usr/bin/perl -l -a -nÜç argüman var ama işe yarıyor. Yine de, kesin sorunu çözemiyorum.
kos

Açıkça komut dosyasıyla bir tercümanı argüman olarak çağırırken, sonraki öğenin başlaması için hiçbir neden yoktur ./. Başka bir deyişle, sadece python filename.pyya da bash script.shiyi çalışacaktır. ./Dahil etmenin tek nedeni , kabuğa arama yapmamasını $PATH(muhtemelen geçerli dizinde dosyaları bulamayacaksınız) değil, olduğu gibi belirlediğiniz yolu kullanmasını söylemek istediğinizde bir komut adındadır. Ancak bu komut argümanlarına uygulanmaz.
Marc van Leeuwen

@kos: Sorun env, argümanların geri kalanının çekirdekten nasıl alınacağı ile ilgili olabilir . Hepsinin, boşlukla bölme işlemi yapmadan büyük bir argüman olduğu varsayılabilir. Artikülasyon için üzgünüm, bunun ayrıntılarını artık o kadar iyi hatırlamıyorum
unperson325680

16

Çizgi:

#!/usr/bin/python

'shebang' olarak adlandırılır ve dosyadaki komutların geri kalanını yorumlamak için kullanılacak tercüman ikilisinin yolunu gösterir. Genellikle bir betiğin ilk satırıdır.

Bu nedenle, satır #!/usr/bin/python, dosyanın içeriğinin pythonadresinde bulunan ikili dosya tarafından yorumlanacağını belirtir /usr/bin/python.

Shebang satırının çekirdek tarafından ayrıştırıldığını ve daha sonra komut dosyasının argüman olarak çağrılacağını unutmayın:

python script_name

Benzer bir durumda #!/bin/bash:

bash script_name

2
İçinde bir kısa çizgi gördüğümü sanmıyorum shebang. Kelime "karma" ve "bang" kelimesinden oluştuğundan yazımınız çok net değildir, çünkü "o" ve "bang" kelimelerinin bir birleşimi gibi görünmektedir.
Kyle Strand

Karakteri nasıl adlandırdığına bağlı olarak hashbang( #= "hash") veya shebang( #= "keskin") diyebilirsiniz #. Ancak, shebanggerçekten daha yaygındır. @KyleStrand
Byte Commander

7

Teknik olarak, gerektirmez. Komut dosyanızın yürütüldüğü ortama giden bir yol gerektirir. Gelecekteki komut dosyalarınız / usr / bin / env komutunu eklemeniz daha iyi olacaktır, sonra python belirtin. Bu, betiğinizin python ortamında nereye yüklendiğine bakılmaksızın python ortamında çalıştığını belirtir. Uyumluluk nedenleriyle bunu yapmak istiyorsanız, kodunuzu paylaştığınız bir sonraki kişinin usr / bin / python içinde python yüklü olduğundan veya bu sistem dosyalarına izin verdiğinden emin olamazsınız.

İşte yığın taşmasından benzer bir soru-cevap .

Senaryonuzda şöyle görünüyor:

#!/usr/bin/env python

Ayrıca python3'ün nasıl belirleneceği konusunda bazı endişeler de görüyorum. İşte nasıl yapılacağı:

#!/usr/bin/env python3

5

Linux'ta, Python #!(shebang) satırını gerektirebilir veya gerektirmeyebilir . Bu, Python kodlarının nasıl işlendiğine, kodları Python etkileşimli modunda veya bir Python komut dosyasında çalıştırarak bağlıdır.

Python etkileşimli modu , kullanıcının doğrudan shebang satırı gerektirmeyen Python kodlarını yazmasına ve çalıştırmasına izin verir. Etkileşimli modu çalıştırmak için bir Terminal açın ve pythonPython 2.X veya python3Python 3.X için yazın.

$  python
Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$  python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Python betiği , kullanıcının Python kodlarını düz bir metin dosyasına yazmasını ve kaydetmesini ve ardından kodları daha sonra çalıştırmasını sağlar. Bu shebang hattını gerektirebilir veya gerektirmeyebilir. Ancak, shebang satırının Linux'ta Python betiğini kullanmak için gerekli olduğu bilinen iki neden vardır.

  1. Python kodlarını çalıştırılabilir bir komut dosyasında çalıştırmak yani kodların nasıl çalıştırılacağını ve hangi tercümanı kullanacağını tanımlar;

  2. Python kodlarını, belirli Python sürümüne göre çalıştırmak, yani yalnızca Python 2.X veya Python 3.X ile uyumlu kodları çalıştırmak

Python scriptleri ile alıştırma yapın

Aşağıda #!(shebang) satırının gerekli olduğunu veya gerekmediğini gösteren vakaları göstermek için kullandığım dosyaların listesi ve içeriği verilmiştir .

$  ls -ln *.py
-rw-rw-r-- 1 1000 1000  94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py

$  file *.py
hello1.py:  ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py:  Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py:  Python script, ASCII text executable
  • hello1.py sadece kaynak kodunu içerir.

    import sys
    sys.stdout.write("Hello from Python %s\n" % (sys.version,))
    print("Hello, World!")
    
  • hello2.py kaynak kodu ve shebang satırını içerir.

    #!/usr/bin/env python
    import sys
    sys.stdout.write("Hello from Python %s\n" % (sys.version,))
    print("Hello, World!")
    
  • hello2e.pyiçerir hello2.pyve çalıştırılabilir.

  • hello3.pyaynı içeren hello2.pyilk satırı için adlandırma ile Python 3 ile işletmek üzere adapte edilmektedir hariç #!/usr/bin/env python3.

  • hello3e.pyiçerir hello3.pyve çalıştırılabilir.

  • hello3m.pymetin düzenleyicideki, yani Mousepad'teki seçenekle hello3.pybirlikte kaydedilen hariç , aynı ve yürütülebilir dosyaya sahip Write Unicode BOM.

Bu noktanın ötesinde, kullanıcı Python komut dosyalarını çalıştırmak için iki yöntemle sunulacak. Her iki yöntem de aşağıda gösterilmiştir.

Yöntem 1: Python programıyla çalıştırma

Kaynak kodu Python 2 ve Python 3 ile çalıştırırken aşağıda verilen komutlar ve çıktılar.

$  python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2]
Hello, World!

$  python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4]
Hello, World!

Python'un her iki sürümü de komut dosyasını başarıyla çalıştırabilirdi. Bu nedenle, Python betiğini veya komutunu çalıştırırken shebang satırı gerekli değildir .pythonpython3

Yöntem 2: Python betiği olarak çalıştır

Kaynak kodu çalıştırılamaz ve çalıştırılabilir durumlar da dahil olmak üzere hiçbiri Python 2 ve Python 3'e uyarlanmamış shebang hattıyla çalıştırırken verilen komutlar ve çıktılar.

$  ./hello1.py
bash: ./hello1.py: Permission denied

$  ./hello2.py
bash: ./hello2.py: Permission denied

$  ./hello3.py
bash: ./hello3.py: Permission denied

$  ./hello2e.py 
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18) 
[GCC 4.8.2]
Hello, World!

$  ./hello3e.py 
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4]
Hello, World!

Bu komut dosyaları yürütülemez, çünkü ilk üç komut bakılmaksızın shebang hattını olup olmamasına (kanıt destekleyen için bkz, başarısız olmuş Ek örneği aşağıda). Son iki senaryoda shebang satırı var ve çalıştırılabilir.

Görünüşe göre, çalıştırılabilir hale getirilmiş bir betik, aslında Shebang satırı olmadan işe yaramaz. Bu nedenle, shebang satırı gereklidir ve Python kodlarını çalıştırılabilir bir komut dosyasında çalıştırırken komut dosyası çalıştırılabilir olmalıdır.

Shebang işe yaramadığında

Hazırlanan ve test edilen örneğimde, hello3m.pyyürütülebilir bir komut dosyası olarak çalıştırma başarısız oldu ve bir hata döndürdü.

$  ./hello3m.py 
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory

Bu, Shebang'ın çalışmadığı veya geçersiz olduğu bilinen bir sınırlamadır . Bir dosya Unicode BOM (Byte Order Mark) olarak kaydedildiğinde, çalıştırılabilir bir Python betiği olarak normal şekilde çalıştırılamaz.

Ek örnek

Bu ek örnek yalnızca destekleyici kanıt olarak değerlendirilecektir. Sonuç zararsız olsa da, kullanıcı bu örneği çalıştırmaktan kaçınmalıdır.

hello1e.pyAynı içeren hello1.pyve çalıştırılabilir hale getirilen başka bir dosya oluşturdum . Bu betiği çalıştırmak bir sözdizimi hatası verdi.

$  ./hello1e.py 
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'

Bu betiği çalıştırırken, ilk başta, fare imleci bir artı işaretine dönüşecek ve görünüşte hiçbir şey yapmayacaktır. Masaüstü veya Terminal penceresine bir tıklama yapmadan sözdizimi hatası gösterilmez. Ardından, bu komut dosyası, komut sysdosyasıyla aynı dizinde bir dosya oluşturur .

$  file sys
sys: PostScript document text conforming DSC level 3.0, Level 1

sysDosya dosya uzantısı olmadan, PostScript dosyası olarak tanımlanmıştır. Bu dosya Evince belgesinde açılabilir ve dosya aslında daha önce tıkladığım pencerenin ekran görüntüsünü içeriyordu. Benim tecrübeme göre, dosya birkaç megabayt kadar büyük olabilir.

Bir kez daha, shebang satırı gereklidir ve Python betiğini çalıştırılabilir bir komut dosyası olarak çalıştırırken betiğin çalıştırılabilir olması gerekir. Aksi takdirde, komut dosyası yukarıda açıklandığı gibi yanlış davranacaktır.

Ek Notlar

"Yapılabilir hale getirilebilir" veya "çalıştırılabilir olması gerekir" terimi, komut dosyasını çalıştırma iznini belirtir. Bu işlem chmod +x FILENAME, Terminal'de komut çalıştırılarak veya "Bu dosyanın program olarak çalışmasına izin ver" seçeneğinin veya Özellikler penceresinde, bir dosya yöneticisinin içindeki benzer bir şeyin işaretlenmesiyle yapılır .

Diğer mevcut cevaplar hemen hemen her şeyi kapsamasına rağmen, bu cevap, konuyu açıklamak için pratik örnekler kullanarak farklı bir yaklaşım benimsemiştir. Kod sözdizimi, örneklerin olduğu gibi Python 2 veya Python 3 ile çalıştırılabileceği şekilde dikkatlice yazılmıştır.

Python kodları adapte edilmiştir Windows üzerinde Python Kullanımı ve Unix platformlarında Python kullanarak her yerde ek tek satırlık kodu ile "Merhaba, Dünya!" programı.

Tüm kodlar ve komutlar tamamen test edilmiştir ve varsayılan olarak Python 2.7 ve Python 3.4 yüklü olan Xubuntu 14.04 sisteminde çalışır.


4

Bu, o dosyanın yürütüldüğünde bilgisayarınızın programla yürütmeyi bildiği anlamına gelir, /usr/bin/pythonbunu nerede yaptığınız bash gibi başka bir dilden ayırırsınız #!/bin/bash. Bu sadece koşabilmeniz için:

./[file-to-execute]

Ve sizin gibi bir şey belirtmeniz gerektiğinden, hangi dosyayı çalıştıracağınızı bilecektir:

python ./[file-to-execute].py

#!Kısmı genel olarak bir şekilde sezonda olan shebang veya krizi patlama .


2
Ayrıca bir hashbang.
Naftuli Kay

1

Birkaç Python sürümünün kurulu olması durumunda, /usr/bin/envkullanılan tercümanın ortamınızdaki ilk sürüm olmasını sağlayacaktır $PATH. Alternatif, şöyle bir şeyi kodlamak olacaktır #!/usr/bin/python;

Unix'te, yorumlanması gereken çalıştırılabilir bir dosya #!, ilk satırın başında ve ardından tercüman (ve ihtiyaç duyabileceği herhangi bir bayrak) başında ne tür tercüman kullanılacağını gösterebilir.

Bu kural yalnızca UNIX tabanlı sistem için geçerlidir.


0

Python 2.x hala standart olan işletim sistemi Linux için faydalıdır, fakat çoğu kişi 3.x'i de indirir.

2.x varsayılan olarak çalışacaktır. Bu yüzden 3.x kodumu, #! / Usr / bin / env python3 ile önek eklerim, böylece 3.x kodu çalıştırır. Beta sürümleri veya sadece biraz eski sürümleri tercih etseydim, küçük revizyonları (python 3.xyz) bile belirtebilirim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.