如何使用setuptools安装python cli脚本,而不使用重复的脚本?

如何使用setuptools安装python cli脚本,而不使用重复的脚本?,python,setuptools,Python,Setuptools,由于argparse,我有两个Python脚本可以从shell中使用 setup.py的相关部分: setup( # (...) zip_safe=True, scripts=['bin/bgce.py', 'bin/sizes.py'], packages=find_packages(), data_files=data_files, entry_points = { 'console_scripts': [

由于argparse,我有两个Python脚本可以从shell中使用

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',]
    }
)
最后我在/usr/local/bin中找到了bgce、bgce.py、size、size.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
def main():
    try:
        some_stuff()
    except KeyboardInterrupt :
        print ""
        sys.exit()

if __name__ == "__main__" :
    main()
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/bgce”,第9行,在
加载入口点('Backtestground==1.0','console\u scripts','bgce')()
文件“/usr/lib/python2.6/dist packages/pkg_resources.py”,第305行,在load_entry_point返回get_distribution(dist)中。load_entry_point(组,名称)
文件“/usr/lib/python2.6/dist packages/pkg_resources.py”,第2244行,在load_entry_point return ep.load()中
文件“/usr/lib/python2.6/dist packages/pkg_resources.py”,第1954行,装入
条目=\uuuuu导入(self.module\u名称,globals(),globals(),[''\uuuuuu名称\uuuuu'])
导入错误:没有名为bgce的模块

我该怎么做才能只安装bgce和sizes,而不安装带有烦人的重复项(用于制表符完成)。py已连接?

IIRC:将bgce.py和sizes.py作为包的一部分,删除scripts参数,保留入口点。

确保实际模块具有如下主要功能:

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
def main():
    try:
        some_stuff()
    except KeyboardInterrupt :
        print ""
        sys.exit()

if __name__ == "__main__" :
    main()
我们经常在
if\uuuuuu name\uuuuu==“\uuuuuu main\uuuuuuuu”下面写出主代码:

如果没有实际的main(),distutils就无法获得加载点。(捕获^C是可选的:)我也有这个问题,直到我意外地发现我的一个模块实际上可以工作,而其他模块却不能。这就是区别,一旦纠正,一切都好

find_packages()返回“bin”,即两个脚本所在的目录。删除脚本参数只会产生2个文件,但都会因导入错误而失败。
bcge=bin.bcge:main
可以使用安装在
/usr/local/share/python$VER/site packages/bin/bcge.py
中的文件。一旦这样做了,你就可以将
bin
重命名为对包有意义的东西。这也不行。脚本最终位于/usr/local/bin中,但当模块位于/usr/local/lib/下面时,请查找/usr/lib/下面的模块/