2015-11-13 49 views
1

我有我的分發源的結構如下:如何處理在安裝腳本中有shebang行的腳本?

|project 
    |setup.py 
    |project.py 
    |package 
     |__init__.py 
     |code.py 

project.py是主要的腳本和有家當線

我應該定義某種方式setup.py上述事實呢?

+0

你的意思是,'project.py'是一個實際上應該從命令行運行的腳本,而不是一個可導入的模塊? –

+0

我很難理解你的問題是什麼......你是什麼意思「在setup.py中定義[這個]事實」?我真的不明白在那裏有什麼意思,但我也不太明白你在問什麼。 – skrrgwasme

+0

我想讓用戶從命令行運行project.py。因此,我設置了shebang線。我想知道是否有必要在安裝腳本中寫入關於project.py的smth(也許,使用'scripts'關鍵字)。 –

回答

1

你會想看看setuptools的console_scripts entry point

說你的project.py目前包含了這樣的事情:

if __name__ == '__main__': 
    run_proj() 

你需要移動內部的package目錄的第一個舉動project.py能夠從setup.py引用它。然後,用console_scripts切入點,這樣註冊run_proj功能:

setup.py

setup(
    # other arguments here... 
    entry_points={ 
     'console_scripts': [ 
      'run-proj = package.project:run_proj', 
     ], 
    } 
) 

之後,你需要重新運行setup.py,例如做python setup.py develop,或任何方法你在開發過程中使用。

然後你會得到一個bin/run-proj腳本,它調用run_proj(),並且可以從命令行調用。 (如果您將程序包安裝在虛擬環境中,該程序包將在venv/bin/run-proj中,或者如果您在系統範圍內安裝,則可以使用usr/local/bin/run-proj,這取決於您的操作系統/發行版)。

該腳本實際上應該是你的路徑上,所以你應該能夠剛剛從shell中運行run-proj

在這一點上,shebang行不再是真正必要的,你可以刪除它(bin/run-proj將有一個自動生成的shebang指向正確的Python解釋器)。

+0

謝謝您的明確解釋! –