Python 打包:如何处理我在大多数项目中使用的辅助模块
Python packaging: What to do with auxiliary modules that I use in most of my projects
我在不同的项目中使用了很多辅助模块。比如这些辅助模块包含一些日志、文件、装饰器等代码
对于我个人使用,我可以简单地捆绑和安装所有辅助模块。
但是,如果我想在 PyPI 上发布我的项目,最合适的方式是什么?将辅助模块也作为一个包发布是否合适——尽管它们几乎没有意义捆绑并且对任何人来说几乎没有用,除非他们使用我的其他项目——然后需要为每个安装辅助包我的其他项目?
将像这样的库拆分成单独的 "project"/包的情况并不少见,例如 krux/tcp-stream-kafka-producer is based on krux/java-stdlib(随机示例 - 只是因为我昨天浏览了 repos...)
因此,我建议您将这些实用程序命名为 <something>-util
(或 "various",或 "stuff" :))并将它们作为一个模块单独发布到 pipy 上。这是执行此操作的更简洁的方法,因为它允许不同的项目使用不同版本的底层库,而无需维护该库的多个副本并且具有清晰的 versioning/dependencies.
您的其他选择:
将库包含在最受欢迎的项目中:这会导致项目依赖关系实际上没有意义。例如,如果该项目更改了主要版本,那么依赖项目是否会受到影响? (你不可能知道)
在您使用的每个项目中复制:这在短时间内和一些项目中可能没问题,但是,很快您将失去对更改的跟踪并且公共文件将不同步。我以前做过,花几个小时调试你已经在另一个项目中修补过的东西是非常烦人的!
我认为将其作为单独的包发布的唯一缺点是您必须小心冲突:即 A 项目需要 v0.1.1
而不是 v0.1.0
而 B 项目是另一种方式大约。值得庆幸的是,python venv
可以帮助处理此类情况。
希望对您有所帮助
我在不同的项目中使用了很多辅助模块。比如这些辅助模块包含一些日志、文件、装饰器等代码
对于我个人使用,我可以简单地捆绑和安装所有辅助模块。
但是,如果我想在 PyPI 上发布我的项目,最合适的方式是什么?将辅助模块也作为一个包发布是否合适——尽管它们几乎没有意义捆绑并且对任何人来说几乎没有用,除非他们使用我的其他项目——然后需要为每个安装辅助包我的其他项目?
将像这样的库拆分成单独的 "project"/包的情况并不少见,例如 krux/tcp-stream-kafka-producer is based on krux/java-stdlib(随机示例 - 只是因为我昨天浏览了 repos...)
因此,我建议您将这些实用程序命名为 <something>-util
(或 "various",或 "stuff" :))并将它们作为一个模块单独发布到 pipy 上。这是执行此操作的更简洁的方法,因为它允许不同的项目使用不同版本的底层库,而无需维护该库的多个副本并且具有清晰的 versioning/dependencies.
您的其他选择:
将库包含在最受欢迎的项目中:这会导致项目依赖关系实际上没有意义。例如,如果该项目更改了主要版本,那么依赖项目是否会受到影响? (你不可能知道)
在您使用的每个项目中复制:这在短时间内和一些项目中可能没问题,但是,很快您将失去对更改的跟踪并且公共文件将不同步。我以前做过,花几个小时调试你已经在另一个项目中修补过的东西是非常烦人的!
我认为将其作为单独的包发布的唯一缺点是您必须小心冲突:即 A 项目需要 v0.1.1
而不是 v0.1.0
而 B 项目是另一种方式大约。值得庆幸的是,python venv
可以帮助处理此类情况。
希望对您有所帮助