【问题标题】:Setuptools not passing arguments for entry_pointsSetuptools 没有为 entry_points 传递参数
【发布时间】:2011-02-20 15:19:17
【问题描述】:

我正在为我编写的 Python 脚本使用 setuptools

安装后,我会这样做:

$ megazord -i input -d database -v xx-xx -w yy-yy

就像我运行它一样。/like_this

但是,我得到:

Traceback (most recent call last):
  File "/usr/local/bin/megazord", line 9, in <module>
    load_entry_point('megazord==1.0.0', 'console_scripts', 'megazord')()
TypeError: main() takes exactly 1 argument (0 given)

看起来 setuptools 没有将我的参数发送到 main() 进行解析(通过 optparse)

这是我的 entry_points 的 setuptools 配置:

entry_points = {
    'console_scripts': [ 
        'megazord = megazord.megazord:main',
        'megazord-benchmark = megazord.benchmark:main',
        'megazord-hash = megazord.mzhash:main',
        'megazord-mutate = megazord.mutator:main',
        ]
}

有什么想法吗?

【问题讨论】:

  • 呃。没关系,我说得太早了。
  • 我在 def main() 中还有一个剩余的 argv。由于某种原因,我之前运行脚本时并没有给我一个错误。

标签: python setuptools distutils


【解决方案1】:

setuptools console_scripts 入口点需要一个没有参数的函数。

幸运的是,optparse(命令行选项解析器)不需要传递任何参数,它会读取 sys.argv[1:] 并将其用作输入。

【讨论】:

【解决方案2】:

只是为了全面了解megazord.py 的外观,使用@Jeffrey Harris 建议使用一个不错的库来解析输入。

import argparse

def main():
    ''' Example of taking inputs for megazord bin'''
    parser = argparse.ArgumentParser(prog='my_megazord_program')
    parser.add_argument('-i', nargs='?', help='help for -i blah')
    parser.add_argument('-d', nargs='?', help='help for -d blah')
    parser.add_argument('-v', nargs='?', help='help for -v blah')
    parser.add_argument('-w', nargs='?', help='help for -w blah')

    args = parser.parse_args()

    collected_inputs = {'i': args.i,
                    'd': args.d,
                    'v': args.v,
                    'w': args.w}
    print 'got input: ', collected_inputs 

像上面那样使用它,一个人会得到

$ megazord -i input -d database -v xx-xx -w yy-yy
got input: {'i': 'input', 'd': 'database', 'w': 'yy-yy', 'v': 'xx-xx'}

而且由于它们都是可选参数,

$ megazord
got input: {'i': None, 'd': None, 'w': None, 'v': None}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2017-07-10
    • 2021-12-20
    • 1970-01-01
    • 2011-08-14
    • 2011-08-05
    • 2012-10-12
    相关资源
    最近更新 更多