簡體   English   中英

#!/ usr / bin / python和#!/ usr / bin / env python,哪個支持?

[英]#!/usr/bin/python and #!/usr/bin/env python, which support?

Python腳本的shebang應該怎么樣?

有些人支持#!/usr/bin/env python因為它可以智能地找到Python解釋器。 其他人支持#!/usr/bin/python ,因為現在在大多數GNU / Linux發行版中, python是默認程序。

這兩種變體有什么好處?

Debian Python Policy聲明:

Python解釋器的首選規范是/usr/bin/python/usr/bin/pythonX.Y 這確保了使用了python的Debian安裝,並且滿足了對其他python模塊的所有依賴性。

維護者不應使用/usr/bin/env python/usr/bin/env pythonX.Y覆蓋Debian Python解釋器。 這是不可取的,因為它繞過Debian的依賴性檢查並使包易受python的不完整本地安裝的影響。

請注意,Debian / Ubuntu使用替代系統來管理/usr/bin/python實際指向的版本。 至少對我來說,這已經在很多python版本中運行得很好(我現在一直在使用2.3到2.7的python),並且在更新過程中有很好的轉換。

請注意, 我從未使用過pip 我想要自動安全升級,所以我通過aptitude安裝我所有的python需求。 使用官方Debian / Ubuntu軟件包讓我的系統比我自己搞亂python安裝更清潔


讓我強調一件事。 上面的建議是指python應用程序的系統安裝。 讓這些使用python的系統管理版本是完全合理的。 如果您實際上正在玩自己的, 不是由操作系統管理的自定義python安裝,使用env變體可能說“使用用戶首選的python”的正確方式,而不是硬編碼系統python安裝(可能是/usr/bin/python )或任何用戶自定義路徑。

如果從python virtualenv中調用它們,使用env python將導致程序的行為不同。

可能是期望的 (例如,您正在編寫腳本以在您的virtualenv中工作)。 可能會有問題 (你為你編寫一個工具,並期望它甚至在virtualenv中工作相同 - 它可能會突然失敗,因為它丟失了包)。

我的拙見是你應該使用env -variant。 它是一個POSIX組件,因此幾乎在每個系統中都可以找到,而在很多情況下直接指定/usr/bin/python中斷,即virtualenv設置。

我用#!/usr/bin/env python作為默認的OS-X的安裝位置是不是 /usr/bin 這也適用於喜歡自定義環境的用戶 - /usr/local/bin是另一個可以找到python發行版的常見位置。

也就是說,這真的無關緊要。 你總是可以用你想要的任何python版本來測試腳本: /usr/bin/strange/path/python myscript.py 此外,當您通過setuptools安裝腳本時,shebang似乎被安裝該腳本的sys.executable所取代 - 我不知道pip ,但我認為它的行為類似。

如你所知,他們可能都在Linux上工作。 但是,如果某人安裝了較新版本的python供自己使用,或者某些要求使人們在/ usr / bin中保留特定版本,則env允許調用者設置其環境,以便通過其調用不同的版本ENV。

想象一下有人試圖看看python 3是否適用於腳本。 他們將首先在路徑中添加python3解釋器,但希望保持系統上的默認值在2.x上運行。 使用硬編碼路徑是不可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM