分发依赖于内部常见便捷库的Python包

时间:2010-12-10 00:12:05

标签: python distribution packaging

我有一些Python包,我想整理并在PyPI上发布。这些包导入了我编写的几个Python模块,以增强或简化某些操作(例如,通过包装csv函数从带有标题的CSV文件读取/写入),提供方便的数据结构等。目前这些模块是位于保存项目代码的顶级目录中,我依靠通过将该目录添加到我的PYTHONPATH环境变量来实现它们。 (我知道,还不够整洁。)

通过为这些模块创建单独的包并将它们上传到PyPI,我可以将这样的包标记为我实际想要分发的包的依赖项。然而,这些便利模块很小并且使用和兴趣有限,因此我认为它们不能作为PyPI上的单独包进行分发。另一方面,我对将这些便利模块(即使用cp convenience_module.py projectX/.)复制到每个项目目录中犹豫不决,因为这会在包含我的Python代码和不同的VCS存储库中创建同一文件的多个副本。我将发布到PyPI的源代码分发tarball。这个问题有一个优雅的解决方案吗?

2 个答案:

答案 0 :(得分:2)

据我所知,通过PyPI分发这些小包只是可行的选择。是的,它使索引与几乎无用的包混乱,但它应该由PyPI维护者解决,而不是包开发人员。另一种方法是使用stdlib或其他util包数据和函数,而不是重新发明轮子。

只需确保您描述那个utils包,或者将它们扩展为对其他人更有用的东西。

答案 1 :(得分:2)

你没有说为什么你对“提供副本”犹豫不决。总的来说,我认为合理的方法是考虑如何为自己设置使用便利模块的方法。您是否将它们安装在站点包(或等效的)中,或者您只是依赖它们在您运行代码的目录中?但是你使用模块,这种情况是理想的,还是有一种方式对你更好?

从这开始,并弄清楚如何通过setup.py自动化它,它允许你把东西放在你想要的系统上(虽然我强烈反对滥用这个功能)。

无论您将它们分发为tarball还是需要它们的软件包,您仍然必须维护所有文件,因此唯一真正的问题是您是否打算来开发这些便利模块他们自己的用户社区有他们自己的支持请求等,或者他们是否明确只是用于支持这个其他模块。

如果您希望这些模块仅用于一个模块,请将它们包含在包中,也可以放在发行版内的“utils”包中。否则你只是把索引与人们认为有用的东西混在一起,但实际上是与其他东西联系起来推动变革和维护。

如果您希望这些模块是通用的,并打算保持这些模块,并认为它们在支持此模块之外使用,请单独分发它们。

相关问题