gpt4 book ai didi

Python打包: catering to different audiences

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:14 24 4
gpt4 key购买 nike

我正在开发一个 Python 包,它由一个库模块和两个使用该库的脚本组成。其中一个脚本是打印一些文本的命令行工具,另一个脚本是 JSON API 服务器。这两个脚本也可以作为希望使用该库的开发人员的示例。

鉴于这种情况,我看到该包的三个主要受众或用例:

  1. 库用户:需要主模块。可能需要访问用于测试模块的脚本以及作为自己代码的 stub 和示例。

  2. CLI 用户:想要时不时运行 CLI 脚本。不需要 API 服务器,并且可能不关心对脚本源的访问。

  3. 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

最佳答案

这就是我现在所做的。

我浏览了 PyPI 寻找类似的软件包,然后查看了 wikidump的目录结构及其 setup.py .

在那里,我发现了 entry_points 参数,它允许指定将在构建时转换为脚本的模块函数。这些脚本还可能具有额外的依赖项。

为了解决这个问题,我将相应的 __main__ block 转换为命名函数并将它们标记为入口点。相关 block (所有 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 源代码。

目录结构保留其原始状态。

我希望对其他人有帮助:)

关于Python打包: catering to different audiences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com