如何实现一个最简单的包管理系统
综述
本文是在学习python的过程中的一个简单的练手小项目,用于熟悉python内部的一些机制,全部的代码位于 tiny package manager。
整体的逻辑是,当我们在编译一个 yarn 项目的过程中,我们会存在一个 package.json
文件,在文件中我们会声明项目的所有依赖。我们通过该依赖文件来进行一个包依赖分析,判断是否项目是否存在版本冲突,如果可以编译,则给出选择对应的版本。
例如:
--- title: dependencies --- flowchart LR jest("jest"):::pink jest2("0.0.61"):::green jest1("0.0.71"):::green express-resource("express-resource-*"):::purple underscore("underscore-*"):::purple sji("sji-*"):::purple express("express-*"):::purple api-easy("api-easy-*"):::purple mongoose("mongoose-*"):::purple indirect01("indirect dependency ..."):::animate jest --> jest1 jest --> jest2 jest1 --> express-resource --> indirect01 jest1 --> underscore --> indirect01 jest1 --> sji --> indirect01 jest2 --> express --> indirect01 jest2 --> api-easy --> indirect01 jest2 --> mongoose --> indirect01 jest2 --> express-resource classDef pink 1,fill:#FFCCCC,stroke:#333, color: #fff, font-weight:bold; classDef green fill: #696,color: #fff,font-weight: bold; classDef purple fill:#969,stroke:#333, font-weight: bold; classDef error fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 classDef coral fill:#f9f,stroke:#333,stroke-width:4px; classDef animate stroke-dasharray: 9,5,stroke-dashoffset: 900,animation: dash 25s linear infinite;