Różne języki programowania używają różnych systemów pakowania.Chleb zależności w kabale. To naprawdę piekło.
W swoim zróżnicowanym podejściu, Java's Maven
wygląda jak najlepiej dla mnie, ponieważ utrzymuje różne wersje plików jar w osobnych wersjach folderów, a zatem nie ma mowy, aby skończyć w konfliktowych wersjach biblioteki.
Następnie przychodzi python. Python's pip
umieszcza swoje pakiety w /usr/local/lib/python/dist-packages/site-packages
. Gdy występuje konflikt wersji, można użyć jego virtualenv
i żyć z nim.
Nodejs obsługuje instalowanie pakietów zarówno w folderach lokalnych, jak i folderach globalnych. Do tej pory, nigdy nie miałem konfliktu zależności w bibliotekach globalnych.
Potem zafascynował mnie styl haskell i zacząłem używać cabal
. Najpierw instalowałem moje biblioteki wewnątrz /home/user1/.cabal
. Kiedy system paczek się zepsuł, jeden z przyjaciół zaproponował mi usunięcie dwóch folderów - /home/user1/.cabal && /home/user1/.ghc
. Teraz, moje pierwsze zamieszanie powstało, dlaczego pliki biblioteki cabal siedzą w dwóch folderach .cabal && .ghc
. Oczyściłem foldery biblioteki, ~/.ghc and ~/.cabal
i zrobiłem cabal install
ze źródła pakietu dla cabal-db-0.1.12
. Teraz pojawił się nowy błąd i byłem zaskoczony, ponieważ zdezynfekowałem wszystkie lokalne repozytoria. Wystąpił błąd,
Configuring Cabal-1.22.2.0...
Building Cabal-1.22.2.0...
Installed Cabal-1.22.2.0
cabal: Error: some packages failed to install:
ansi-terminal-0.6.2.1 failed during the configure step. The exception was:
user error (The package 'ansi-terminal' requires Cabal library version -any &&
>=1.6 but no suitable version is installed.)
Potem próbowałem najbezpieczniejszym - sandbox
dla cabal-db
. Zadziałało. Potem powtórzyłem sandboxing dla innego pacakge, ghc-pkg-autofix. Zrobiłem,
cd ghc-pkg-autofix-0.2.0.1
cabal sandbox init
cabal install
I do piaskownicy, gdzie nie ma absolutnie żadnych zależności zewnętrzne, tam znowu są błędy,
cabal: Could not resolve dependencies:
trying: ghc-pkg-autofix-0.2.0.1 (user goal)
trying: Cabal-1.22.2.0 (dependency of ghc-pkg-autofix-0.2.0.1)
next goal: process (dependency of ghc-pkg-autofix-0.2.0.1)
rejecting: process-1.2.0.0/installed-06c..., 1.2.3.0, 1.2.2.0, 1.2.1.0,
1.2.0.0, 1.1.0.2, 1.1.0.1, 1.1.0.0 (conflict: ghc-pkg-autofix => process>=1.0
&& <1.1)
rejecting: process-1.0.1.5, 1.0.1.4, 1.0.1.3, 1.0.1.2, 1.0.1.1, 1.0.0.0
(conflict: Cabal => process>=1.1.0.1 && <1.3)
Dependency tree exhaustively searched.
Note: when using a sandbox, all packages are required to have consistent
dependencies. Try reinstalling/unregistering the offending packages or
recreating the sandbox.
robię coś źle (lub) tego rodzaju konfliktów zależność są dość powszechne w kabała? Rozumiem, że zarządzanie zależnościami w innych językach jest o wiele prostsze.
Uwaga: Używam cabal-install version 1.22.0.0
& & The Glorious Glasgow Haskell Compilation System, version 7.8.4
Nie jest to częste - ale bardzo często dla początkujących. Rzeczywiście, najprostszym sposobem dla początkujących jest ustawienie IMHO w czystym środowisku i korzystanie z obszarów izolowanych. Jest [ładny tutorial, jak to zrobić tutaj] (http://www.stackage.org/install) (nie musisz używać części stosu, jeśli nie chcesz - jeśli masz GHC 7.10 .1 faktycznie nie możesz AFAIK) - btw: użyłeś Celala-1.22 celowo (np. Z GHC 7.10.1?), Ponieważ nie korzystałbym z platyny Haskella) – Carsten
btw: ciekawy - jak maven radzi sobie z sytuacją Pakiet X zależy od A-Vers1 i Y na a-Vers2 (niekompatybilny) i chcesz używać zarówno X, jak i Y? – Carsten
Wewnątrz repozytorium 'M2_HOME', maven utworzy dwa foldery, takie jak' A/1.0.0/* 'i' A/2.0.0/* '. Ponieważ globalne repozytorium używa oddzielnych folderów opartych na wersjach, różne wersje tego samego "archetypu/słoika" mogą znajdować się wewnątrz twojego systemu w jednym miejscu. –