Python:迁移setup.py" scripts ="到entry_points

时间:2015-05-28 23:36:35

标签: python setup.py

我想利用其他人的python实用程序 foobartools ,其原生环境是linux。 Foobartools 是纯粹的python,所以没有理由不能在我的Windows上使用它。

在他们的setup.py他们使用较旧的格式scripts=['bin/foobar'],

运行pip install -e b:\code\foobar会在foobar中创建一个名为%pythonhome%\Scripts的文件,但即使Scripts位于PATH中,Windows也不知道它。要使用它,我需要制作一个@python %pythonhome%\scripts\foobar批处理文件。这可行,但不是最优的(例如, ctrl-c 处理很难看。)

我知道如果我将更新且推荐的entry_points语法添加到 setup.py ,pip将在Windows上自动创建Scripts\foobar.exe(我可以抛弃批处理文件) 。在Linux Scripts\foobar上保持不变,每个人都很高兴。

entry_points = {
    'console_scripts': ['foobar = foobartools:main'],
}

我不知道如何处理等式右边的foobartools:main。怎么打电话bin/foobar foobartools 模块没有像bin脚本那样的单个可调用函数或模块,并且bin脚本相对复杂。

我想尽可能少地对项目进行更改,以便a)补丁提交有更好的机会被上游接受,以及b)如果上游仍然不感兴趣那么我做的工作就少了跟上它。

[update] 现有的源树结构:

foobartools/
    bin/foobar
    foobartools/
        __init__.py
        foo/
            __init__.py
            one.py
            two.py
        bar/
            ...
        baz/
            ...
    setup.py

1 个答案:

答案 0 :(得分:1)

我找到了一个正在运行的 Scripts \ foobar.exe ,但它改变了更多代码而不是我想要的。我希望只需要对setup.py进行一些调整,或者至少在上游模块中没有任何问题。我不太了解它,以确保我不会以某种方式阻碍。

(1)移动bin/foobar - > foobartools/foobar_cli.py
(2)在setup.py中,注释掉#scripts=...并添加:

entry_points = {
    'console_scripts': ['foobar = foobartools.foobar_cli:main'],
} 

[稍后] 对同一核心理念的改进意味着我将我的肥肉放在主要业务领域之外:

(1)移动./bin/foobar - > ./foobar_cli/foobar.py(注意扩展名和文件夹更改)
(2)将空__init__.py添加到同一文件夹
(3)console_scripts': ['foobar = foobar_cli.foorbar:main'],