Python打包:如何处理我在大多数项目中使用的辅助模块

Python打包:如何处理我在大多数项目中使用的辅助模块,python,publish,pypi,Python,Publish,Pypi,我有许多辅助模块,在我的不同项目中使用。例如,这些辅助模块包含一些用于日志、文件、装饰器等的代码 对于我个人使用,我可以简单地捆绑和安装所有辅助模块 但是,如果我想在PyPI上发布我的项目,那么最合适的方式是什么?将辅助模块也发布为一个包是否合适?即使它们几乎没有捆绑的意义,并且除了在使用我的其他项目时对任何人都没有安装的用处,然后要求为我的其他每个项目安装该辅助包 将这样的库拆分为单独的“项目”/“包”并不少见,例如,它基于(随机示例-仅仅因为我昨天浏览了repo…) 因此,我建议您将实用程序

我有许多辅助模块,在我的不同项目中使用。例如,这些辅助模块包含一些用于日志、文件、装饰器等的代码

对于我个人使用,我可以简单地捆绑和安装所有辅助模块


但是,如果我想在PyPI上发布我的项目,那么最合适的方式是什么?将辅助模块也发布为一个包是否合适?即使它们几乎没有捆绑的意义,并且除了在使用我的其他项目时对任何人都没有安装的用处,然后要求为我的其他每个项目安装该辅助包

将这样的库拆分为单独的“项目”/“包”并不少见,例如,它基于(随机示例-仅仅因为我昨天浏览了repo…)

因此,我建议您将实用程序命名为
-util
(或“各种”,或“东西”:),并将它们作为pipy上的一个模块单独发布。这是一种更简洁的方法,因为它允许不同的项目使用基础库的不同版本,而不必维护该库的多个副本,并且具有明确的版本控制/依赖关系

您的其他选择:

  • 将库包含在最流行的项目中:这会导致项目依赖关系变得毫无意义。例如,如果该项目更改了主要版本,则从属项目是否会受到影响?(你不知道)

  • 在您使用的每个项目中进行复制:在短时间内和少数项目中,这可能是可行的,但是,很快您将失去对更改的跟踪,并且常见文件将失去同步。我以前做过,花几个小时调试你已经在另一个项目中修补过的东西是非常烦人的

  • 我认为将其作为一个单独的包发布的唯一缺点是您必须小心冲突:即项目需要
    v0.1.1
    ,而不是
    v0.1.0
    ,而B项目则相反。谢天谢地,python
    venv
    可以帮助解决这种情况


    希望有帮助

    除非它们很大,否则将它们作为主要项目的一部分进行捆绑可能更容易。当然,如果人们安装了你的多个项目,他们可能会有一些冗余文件,但最多可能是千字节。@Amber很抱歉问了一个可能很愚蠢的问题,我不熟悉打包,但是我怎样才能在不复制文件的情况下将它们捆绑到我的主项目中呢?如果你担心将一个“无用”的包上载到pypi,你可以用你所有的实用程序文件创建一个git repo,并将该repo添加到你的依赖项中。@urban谢谢,这让人放心:)至于最后一段:您是否有一个链接,解释如何告诉setuptools在虚拟环境中安装,而不强迫最终用户自己创建虚拟环境?@Bananach
    venv
    将在您处理冲突/发布时解决问题。。。如果你有最终用户,我不能100%确定最好的方法。在这种情况下,我通常会采用类似于
    composer
    (php)的方法-使用install.sh/Makefile下载
    /vendor/
    中的依赖项,然后将其包含在路径中。。。Python/setuptools可能有一种“官方”的方法来实现这一点