分发依赖于内部公共便利库的Python包

分发依赖于内部公共便利库的Python包,python,distribution,packaging,Python,Distribution,Packaging,我有几个Python包,我想整理一下并在PyPI上发布。这些包导入了我编写的几个Python模块,以增强或简化某些操作,例如,通过包装函数读取/写入带有标题的CSV文件,提供方便的数据结构等。目前,这些模块位于顶层目录中,该目录保存了我项目的代码,我依靠将该目录添加到PYTHONPATH环境变量来访问它们。不太整洁,我知道 通过为这些模块创建一个单独的包并将它们上传到PyPI上,我可以将这样的包标记为我实际想要分发的包的依赖项。然而,这些方便的模块很小,使用和兴趣有限,因此我认为它们不值得在Py

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


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

据我所知,通过PyPI分发这些小软件包是唯一可行的选择。是的,它让索引中充斥着几乎无用的包,但这应该由PyPI维护人员而不是包开发人员来解决。另一种选择是使用stdlib或其他util包数据和函数,而不是重新发明轮子


只需确保您描述了utils包,或者将其扩展为对其他人更有用的内容

你不会说为什么你对“提供副本”犹豫不决。总的来说,我认为一个合理的方法是考虑如何为自己设置便利模块。您是在站点软件包或等效软件包中安装它们的,还是仅仅依赖于它们位于运行代码的目录中?无论您如何使用这些模块,这种情况是理想的,还是有一种更适合您的方法

从这一点开始,通过setup.py了解如何实现自动化,它可以让您将内容放在系统中任何需要的地方,尽管我强烈反对滥用此功能

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

如果您希望这些模块仅用于一个模块,请将它们包含在包中,可能包含在发行版内的“utils”包中。否则,你只是把人们可能认为有用的东西塞进索引中,而实际上,这些东西与驱动它们的更改和维护的其他东西紧密结合在一起


如果您希望这些模块是通用的,并且希望维护它们,并且认为它们在支持此模块之外有其他用途,请单独分发它们

是的,它让索引中充斥着几乎无用的包,但这应该由PyPI维护人员而不是包开发人员来解决。对Python社区来说,我觉得这不是一个很好的公民。PyPI甚至有维护者吗?似乎开发者应该成为一个好邻居。另一方面,如果事情就是这样,那么我可以接受;提供副本意味着与我的意思不同的东西,即将文件复制到多个源树。我完全依赖修改后的PYTHONPATH环境变量来确保模块的导入工作;他们还没有在自己的Python包中使用setup.py。此外,我不打算对这些模块的功能进行太多扩展;它们的内容只是我发现我想在各种项目中重复使用的函数的集合。