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

mat*_*kie 11 python setup.py

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

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

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

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

entry_points = {
    'console_scripts': ['foobar = foobartools:main'],
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何处理等式的右边,foobartools:main.如何打电话bin/foobar?该foob​​artools模块没有一个可调用的函数或模块一样,对应的bin脚本,脚本仓相对复杂.

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

[更新]现有的源树结构:

foobartools/
    bin/foobar
    foobartools/
        __init__.py
        foo/
            __init__.py
            one.py
            two.py
        bar/
            ...
        baz/
            ...
    setup.py
Run Code Online (Sandbox Code Playgroud)

mat*_*kie 1

我得到了一个有效的Scripts\foobar.exe,但它更改的代码比我希望的要多。我希望对 setup.py 进行一些调整,或者至少不会在上游模块内部造成混乱。我不太了解它,无法确定我不会以某种方式妨碍它。

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

entry_points = {
    'console_scripts': ['foobar = foobartools.foobar_cli:main'],
} 
Run Code Online (Sandbox Code Playgroud)

[后来]对相同核心思想的细化,意味着我将我的肥脚排除在主要业务领域之外:

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