2014-03-19 29 views
1

創建Python包時,實際的頂級命令經常安裝在PATH文件夾中,例如/ usr/local/bin。它引用相關的所有封裝模塊,他們需要與包名被明確限定:打包和argparse

import package.module 

,並明確要求

package.module.function(args) 

在一個大包,具有廣泛用途argparse,有可能會有數百個對包中函數和變量的引用,當從/usr/local/bin/cmd.py引用時,所有這些引用都需要使用包名進行限定。這對於生產使用來說很好,但是在開發過程中很痛苦,因爲每次測試更改時都需要重新安裝軟件包。 (即它只能找到那個模塊,明確的位置。

所以,最後,我的問題: - 命令本身(/usr/local/bin/cmd.py)可以是一個存根導入一個模塊的封裝內,包含argparser及其定義?

使用這個方法,所有的模塊(除了Stub)住包目錄和封裝內引用中會發現所有,而不需要其他模塊明確聲明它們的包名

+0

除了下面的答案,請確保你開發一個好的單元測試套件。如果你有很好的單元測試覆蓋率,那麼你就不需要像經常一樣進行完整的端到端測試了(你可能會檢查更多的代碼是更少的時間)。 – mgilson

回答

1

是的,setuptools.setup(參數調用entry_points需要一個字典和密鑰稱爲console_scripts正是爲你準備的。

setuptools.setup(
    ... 
    entry_points={'console_scripts': ['mycmd = mycmd:main']}, 
) 

這將創建一個在bin目錄mycmd命名腳本(系統或virtualenv中),它加載mycmd模塊調用時執行其主要功能。

http://pythonhosted.org//setuptools/setuptools.html#automatic-script-creation