使用 Cabal 升级包依赖
Upgrade package dependencies using Cabal
我有 a script 每天部署一次 Haskell 程序。目前是:
cabal update
cabal install --only-dependencies
cabal configure
cabal build
这确保它具有最新的包索引列表,升级 project.cabal
中下限已更改的任何依赖项,并构建代码。
但是,我真的很想升级任何具有新的合适版本的依赖项。
- 我尝试添加
--upgrade-dependencies
但拒绝升级任何东西,因为它会破坏现有的包。
- 我尝试将其与
--force-reinstalls
结合使用,但它安装了 template-haskell
的新版本(不是一个好主意)并且 QuickCheck
之类的东西将不再编译。
自动升级包的正确方法是什么?
您可以使用 cabal new-build
,如果您只想升级 大多数 依赖项,则将您希望保持不变的几个依赖项冻结在 cabal.project.freeze 文件中。
cat <<EOF >cabal.project.freeze
constraints: template-haskell == 2.13.0.0
EOF
和
cabal update
# Perhaps rm -rf dist-newstyle if you want a completely fresh build
cabal new-build --upgrade-dependencies
升级到 Cabal 2.0.0.0 或更高版本。
从 Cabal 2.0.0.0 开始,它不再升级 template-haskell
,根据 the changelog:
- Made the 'template-haskell' package non-upgradable again (#4185).
因此 --upgrade-dependencies --force-reinstalls
适用于较新的版本。
我有 a script 每天部署一次 Haskell 程序。目前是:
cabal update
cabal install --only-dependencies
cabal configure
cabal build
这确保它具有最新的包索引列表,升级 project.cabal
中下限已更改的任何依赖项,并构建代码。
但是,我真的很想升级任何具有新的合适版本的依赖项。
- 我尝试添加
--upgrade-dependencies
但拒绝升级任何东西,因为它会破坏现有的包。 - 我尝试将其与
--force-reinstalls
结合使用,但它安装了template-haskell
的新版本(不是一个好主意)并且QuickCheck
之类的东西将不再编译。
自动升级包的正确方法是什么?
您可以使用 cabal new-build
,如果您只想升级 大多数 依赖项,则将您希望保持不变的几个依赖项冻结在 cabal.project.freeze 文件中。
cat <<EOF >cabal.project.freeze
constraints: template-haskell == 2.13.0.0
EOF
和
cabal update
# Perhaps rm -rf dist-newstyle if you want a completely fresh build
cabal new-build --upgrade-dependencies
升级到 Cabal 2.0.0.0 或更高版本。
从 Cabal 2.0.0.0 开始,它不再升级 template-haskell
,根据 the changelog:
- Made the 'template-haskell' package non-upgradable again (#4185).
因此 --upgrade-dependencies --force-reinstalls
适用于较新的版本。