我想利用其他人的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
答案 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'],