2010-12-05 6 views
5

私はargparseのおかげで、シェルから2つのPythonスクリプトを使用できます。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、サイズ、/ usr/local/binにsizes.pyで終わります。すべての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とpackagesの一部にスクリプトの引数を取り除き、エントリポイントを保持します。

+0

find_packages()は、両方のスクリプトがあるディレクトリbinを返します。 scripts引数を削除すると、ファイルは2つだけになりますが、どちらもImportErrorで失敗します。 – thorwil

+0

'bcge = bin.bcge:main'は'/usr/local/share/python $ VER/site-packages/bin/bcge.py'にインストールされたファイルで動作します。これがうまくいけば、 'bin'の名前をパッケージにとって意味のあるものに変更することができます。 – Tobu

+0

それでもうまくいきません。スクリプトは/ usr/local/binにありますが、/ usr/local/lib /以下にある場合は/ usr/lib /以下のモジュールを探します。 – thorwil

4

実際のモジュールは、このようなメイン機能があることを確認します(実際のメインが存在しない場合は

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

if __name__ == "__main__" : 
    main() 

を私たちはしばしばif __name__ == "__main__" : 以下の主なコードを書くのパターンを行うと、 )、distutilsはロードポイントを取得できません。 (Catching^Cはオプションです:)私のモジュールの1つが実際に働いていて、他のモジュールがうまく動作していないことが間違って発見されるまで、私はこの問題も抱えていました。これは差がありました。一度修正すれば、それはすべていいです!

関連する問題