我想利用其他人的python实用程序foobartools,其原生环境是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?该foobartools模块没有一个可调用的函数或模块一样,对应的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)
我得到了一个有效的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'],