Python导入自研Git项目作为包时的版本冲突问题
解决这个冲突的核心是让my_package和你的应用对my-package1的版本要求达成一致,以下是几种兼顾版本控制和依赖兼容的处理方式:
给
my_package的依赖指定明确版本
修改my_package的pyproject.toml,把my-package1的依赖从指向最新版本改成和应用中commit_hash1一致的提交,或者指定兼容的分支/标签:dependencies = [ "my-package1 @ git+ssh://git@bitbucket.org/.../my_package1.git@commit_hash1", "my-package2 @ git+ssh://git@bitbucket.org/.../my_package2.git" ]这样
my_package和应用依赖的my-package1版本完全匹配,不会出现冲突,同时两边都保留了版本控制。如果my-package1有发布稳定标签,用标签代替commit哈希会更直观。升级应用中
my-package1的版本
拉取my-package1仓库的最新提交,把应用requirements.txt里的commit_hash1替换成最新的commit哈希:my-package @ git+ssh://git@bitbucket.org/.../my_package.git@commit_hash my-package1 @ git+ssh://git@bitbucket.org/.../my_package1.git@latest_commit_hash这种方式让应用和
my_package依赖同一版本的my-package1,既解决冲突,又保留了明确的版本追踪。注意升级后要测试应用功能,确保my-package1的最新版本不会影响应用运行。临时覆盖依赖(谨慎使用)
如果必须保留应用中旧版本的my-package1,可以用pip的强制安装命令覆盖依赖:pip install -r requirements.txt --force-reinstall my-package1@git+ssh://git@bitbucket.org/.../my_package1.git@commit_hash1但这种方法有风险,因为
my_package是基于my-package1最新版本开发的,旧版本可能缺失必要功能,导致my_package运行出错,使用前一定要充分测试。规范包版本管理
给所有自研包(my_package、my-package1、my-package2)添加版本标签(比如v1.2.0),在pyproject.toml中指定依赖的版本范围:dependencies = [ "my-package1 >=1.2.0,<2.0.0", "my-package2 >=1.0.0" ]同时应用的
requirements.txt也使用版本标签指定依赖:my-package @ git+ssh://git@bitbucket.org/.../my_package.git@v1.0.0 my-package1 @ git+ssh://git@bitbucket.org/.../my_package1.git@v1.2.0这种方式能从根源减少依赖冲突,让依赖管理更清晰可控。
内容的提问来源于stack exchange,提问作者python_is_my_snake

