我正在开发一个Python包,它包含一个库模块和两个使用该库的脚本。其中一个脚本是打印出一些文本的命令行工具,另一个是JSON API服务器。这两个脚本也可以作为希望使用该库的开发人员的示例。
鉴于这种情况,我看到了包的三个主要受众或用例:
图书馆用户:需要主模块。可能希望访问用于测试模块的脚本以及用于自己代码的存根和示例。
CLI用户:希望不时地运行CLI脚本。不需要API服务器,也可能不关心对脚本源的访问。
API提供程序:与CLI用户相同,但具有API服务器脚本。可能需要CLI脚本进行快速测试。
理想情况下,脚本用户还可以选择是直接从目录还是从$ PATH运行脚本。
如何在目录树和一个或多个分发包中(可能使用setuptools)正确地构建它?
当前的源布局如下:
main_folder
README
setup.py
mypackage
__init__.py # contains the library functions
mymodule.py # link to __init__.py for easy import in the scripts
cli.py
api_server.py
答案 0 :(得分:1)
这是我现在所做的。
我浏览了PyPI,寻找类似的软件包,然后查看了wikidump的目录结构及其setup.py。
在那里我发现了entry_points
参数,它允许指定在构建时转换为脚本的模块函数。这些脚本也可能有额外的依赖关系。
为了解决这个问题,我将各个__main__
块转换为命名函数,并将其标记为入口点。相关块(所有setuptools.setup()
参数)如下所示:
[...]
requires=['pyswisseph', 'numpy'],
extras_require={'Flask':['flask']},
entry_points={
'console_scripts':
['cerridwen = cerridwen.cli:main',
'cerridwen-server = cerridwen.api_server:main [Flask]']
}
[...]
每个人都获取模块和脚本,但只有在第一次运行需要它们的脚本时才会安装可选依赖项。脚本逻辑也将作为主模块的一部分安装,以便每个人都可以根据需要使用他们的帮助函数。
至于以脚本为例,我打算在项目的网站上引用他们的github资源。
目录结构保持原始状态。
我希望能帮助别人:)