2016-02-29 18 views
4

查看隨機選擇的着名Python軟件包,爲什麼總體趨勢是在setup.py的頂部不包含#!/usr/bin/env python行?我知道,與文件交互的通常推薦的方法是這樣的:爲什麼setup.py通常沒有shebang行?

python setup.py install 

而不是

./setup.py install 

但有一個很好的理由?

這些包不包括家當:pytestlxmlsixvirtualenvpip

但這些事:requestssimplejsonsetuptools

+0

'#!'行不會傷害,因爲它是一個註釋。人們可能很懶惰。 – 2016-02-29 13:44:41

+0

就我個人而言,我經常忘記它(不僅僅是'setup.py',而且也是其他腳本) –

回答

6

setup.py打算替你安裝Python解釋你正在運行它,它是庫路徑。一個shebang會定義這個解釋器,這是開發人員不希望的。

即使你有一個帶有shebang的setup.py,你仍然應該在解釋器之前運行該文件。它可以避免你遇到類似「黑客攻擊已經發生!」的問題嗎?

1

因爲python包也必須在Windows平臺上工作。 python setup.py install是普遍的命令

+2

shebang在任何平臺上都不會受到傷害。必須在Windows上運行的論點是有效的,但它沒有任何區別。 –

+0

shebang不會避免setup.py在windows中工作,所以我不明白這是如何回答這個問題的。 – Goyo

+1

閱讀完本文後,我查看了[docs](https://docs.python.org/3/using/windows.html#shebang-lines),發現實際上'/ usr/bin/env'是便攜式的到Windows。 – erip

2

在這種設置下,家當提供一些好處,以及一個很大的缺點:

  • 的家當是有用的,這裏不相關的原因:

    • 它簡化重複使用腳本(少打字)
    • 它闡明瞭腳本在查看源代碼時的操作方式。
  • shebang必然決定用來運行它的解釋器。我已經寫了setup.py腳本,我已經測試爲python setup.py installpython3 setup.py install;在這些情況下,我根本不知道該在什麼地方放。

0

根據我的經驗,sh在各種分佈幾乎總是位於/bin,或至少在符號鏈接到/bin一個文件夾。他們幾乎總是遵循相同的標準。因此,使用#!/bin/sh幾乎適用於所有情況,當然除了在Windows機器上。這完全不同。

另一方面,Python對這個部門有點麻煩。首先,並非所有的發行版都有python二進制文件存儲或符號鏈接到/bin/python,例如Ubuntu仍然只有/usr/bin/python中的python二進制文件。另一方面,即使對於在/bin中有python的人,在某些操作系統(如Fedora和OS X)中,/bin/python表示Python2,而在其他操作系統上,如Arch linux,/bin/python表示Python3。考慮Python2和Python3碼不完全兼容,如果使用#!/bin/python並運行該腳本與

./setup.py 

如果python3作爲您的機器上解釋,但真正python2由腳本作者的意思可能會導致問題。

+0

你不應該指望在Ubuntu上找到'/ bin/python'。 –

+0

@KlausD。相應地更改,謝謝。 – Chong