2017-08-30 28 views
1

我有一个数字,我在我不同的项目中使用的辅助模块的辅助模块做。例如,这些辅助模块都包含用于记录,文件,装饰等Python打包:如何处理,我在我的大多数项目都使用

一些代码对于我个人用的,我可以简单地捆绑并安装所有的辅助模块。

如果我想发表我的PyPI上的项目,但是,什么是最合适的方式去?是否也可以将辅助模块作为一个包发布 - 尽管它们捆绑在一起并没有什么意义,并且对于任何人来说安装都很难,除非他们使用我的其他项目 - 然后需要为每个包安装辅助包我的其他项目?

+1

除非它们很大,否则将它们捆绑为主项目的一部分可能更容易。当然,如果人们安装了多个项目,他们可能会有少量多余的文件,但这可能最多只有千字节。 – Amber

+0

@Amber对不起,也许是一个愚蠢的问题,我是新来的包装,但我如何将它们捆绑到我的主项目中而不需要复制文件? – Bananach

回答

1

的情况并不少见/包,例如krux/tcp-stream-kafka-producer基于krux/java-stdlib喜欢这些库分割成独立的“项目”(随便举个例子 - 只是因为我昨天浏览回购...)

所以,我建议你将实用程序命名为<something>-util(或“各种”或“东西”:)),然后将它们作为模块分别在pipy上单独发布。这是更简单的方法,因为它允许不同的项目使用不同版本的底层库,而无需维护该库的多个副本以及清晰的版本/依赖关系。

你的其他选择:

  1. 包括在最流行的项目库:这导致了项目的依赖并不真正意义。例如,如果该项目更改主版本,受影响的项目是否受影响? (你不知道)

  2. 复制你使用的每一个项目:这可能对于短时间和一些项目是可以的,但是很快你就会失去跟踪改变,并且公共文件将不同步。我之前就已经这么做了,花费几个小时来调试你已经在另一个项目中修补过的东西是非常烦人的!

唯一的缺点我与释放它作为一个单独的包看到的是,你必须要小心的冲突:即项目需要v0.1.1,而不是v0.1.0而B项目是周围的其他方式。谢天谢地,python venv可以帮助解决这种情况。

希望它有帮助

+1

如果你担心上传“无用”包的PyPI你可以送花儿给人刚刚创建的所有实用程序文件一个git回购和回购添加到您的依赖关系。 – orangeInk

+0

@urban谢谢,这是令人欣慰的:)至于最后一段:你有没有解释如何告诉setuptools的虚拟环境中安装,而不强迫最终用户创建虚拟环境中自己的链接? – Bananach

+0

@Bananach'venv'将解决这个问题,如果你处理冲突/发布......如果你有最终用户,我不是100%确定最好的方法。我通常在这种情况下做的就是按照一个'composer'(PHP)一样的方式 - 有install.sh/Makefile,将下载的依赖于' /供应商/'然后将其包括在路径...的Python/setuptools可能有这样做的“官方”方式 – urban

相关问题