2010-12-05 59 views
5

我有兩個Python腳本,可以從shell使用,因爲它們是感謝argparse。如何用setuptools安裝python cli腳本而不重複?

setup.py的相關部分:

setup(
    # (...) 
    zip_safe=True, 
    scripts=['bin/bgce.py', 'bin/sizes.py'], 
    packages=find_packages(), 
    data_files=data_files, 
    entry_points = { 
     'console_scripts': [ 
      'bgce = bgce:main', 
      'sizes = sizes:main',] 
    } 
) 

我結束了bgce,bgce.py,大小,sizes.py在/ usr/local/bin目錄。所有4個工作。

如果我離開了無論是包或腳本行,有沒有重複,但這些文件不能是這樣的:

Traceback (most recent call last): 
File "/usr/local/bin/bgce", line 9, in <module> 
    load_entry_point('Backtestground==1.0', 'console_scripts', 'bgce')() 
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 305, in load_entry_point return get_distribution(dist).load_entry_point(group, name) 
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2244, in load_entry_point return ep.load() 
File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1954, in load 
    entry = __import__(self.module_name, globals(),globals(), ['__name__']) 
ImportError: No module named bgce 

我能做些什麼來只有bgce和大小安裝,沒有重複用討厭(爲製表符完成).py附加?

回答

0

IIRC:將bgce.py和sizes.py作爲你包的一部分,刪除腳本參數,保留入口點。

+0

find_packages()返回'bin',這兩個腳本都是dir。刪除腳本參數只會導致2個文件,但都會導致ImportError失敗。 – thorwil 2010-12-05 17:46:31

4

確保實際模塊具有主要功能是這樣的:

def main(): 
    try: 
     some_stuff() 
    except KeyboardInterrupt : 
     print "" 
     sys.exit() 

if __name__ == "__main__" : 
    main() 

我們經常做的if __name__ == "__main__" : 下方寫出主代碼的模式,如果沒有實際的main( ),distutils無法獲得加載點。 (捕捉^ C是可選的:)我也有這個問題,直到我不小心發現我的模塊之一實際工作,而其他人沒有。這是不同的,一旦糾正,這一切都很好!