我有我的分發源的結構如下:如何處理在安裝腳本中有shebang行的腳本?
|project
|setup.py
|project.py
|package
|__init__.py
|code.py
project.py
是主要的腳本和有家當線。
我應該定義某種方式setup.py
上述事實呢?
我有我的分發源的結構如下:如何處理在安裝腳本中有shebang行的腳本?
|project
|setup.py
|project.py
|package
|__init__.py
|code.py
project.py
是主要的腳本和有家當線。
我應該定義某種方式setup.py
上述事實呢?
你會想看看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解釋器)。
謝謝您的明確解釋! –
你的意思是,'project.py'是一個實際上應該從命令行運行的腳本,而不是一個可導入的模塊? –
我很難理解你的問題是什麼......你是什麼意思「在setup.py中定義[這個]事實」?我真的不明白在那裏有什麼意思,但我也不太明白你在問什麼。 – skrrgwasme
我想讓用戶從命令行運行project.py。因此,我設置了shebang線。我想知道是否有必要在安裝腳本中寫入關於project.py的smth(也許,使用'scripts'關鍵字)。 –