Leider kennt nimble (noch) kein Command, mit dem man ein Update der bereits installierten Pakete machen kann, sondern diese lediglich erneut installieren, bzw. mit einer neueren Version überschreiben kann.
Update kennt nimble leider nicht:
nimble Update pkgname
Nur Install:
nimble Install pkgname ; shows interactive prompts (y/n)
nimble Install pkgname -y ; Accept all interactive prompts (Overwrite existing packages).
nimble Install pkgname -n ; Reject all interactive prompts (Skip existing packages).
Hier habe ich dann ein Script gefunden, mit dem alle installierten Pakete in einem Rutsch mit der jeweils aktuellen Version überschrieben werden können.
https://forum.nim-lang.org/t/4648
Auf dieser Seite verweist der Author jedoch auf github, wo er eine aktuellere Version anbietet:
https://gist.github.com/zaferarican/91fe52dcf3f9aa78c24d86168d8aa5fb
Diese Version habe ich dann ein wenig erweitert und auch einen kleinen Fehler abgefangen. ; ==>> if package == "": continue
Als Default wird bei ihm die Option -y gesetzt:
let (outP, errP) = gorgeEx("nimble -y install " & package)
Das habe ich nun so umgeschrieben, dass auch -n als Option angegeben werden kann, oder keine, dann wird -y verwendet.
#[ Run it using
nim e update_all.nims [-y|-n] # ! -y = Default
# * -y - Accept all interactive prompts (Overwrite existing packages).
# * -n - Reject all interactive prompts (Skip existing packages).
]#
import strutils
proc execErr(cmd: string, exitMsg: string= "", exitCode: int = 1): string =
let (outR, errR) = gorgeEx(cmd)
if errR != 0:
echo outR
echo exitMsg
quit(exitCode)
result = outR
var option: string = "-y"
if paramCount() > 0:
for p in 1..paramCount():
var param = paramStr(p)
# echo "param = " & param
if param == "-n": option = param
discard execErr("nimble refresh", exitCode = 2)
let installed = execErr("nimble list --installed", exitCode = 1)
echo "\nInstalled packages:\n" & installed & "\n"
# if 1 == 1: quit(2)
let out_lines = splitLines(installed)
for line in out_lines:
let package = line.split({' '})[0]
if package == "": continue
echo "Updating " & package
let (outP, errP) = gorgeEx("nimble install " & package & " " & option)
echo outP
if errP != 0:
echo "Error!\n"
else:
echo "Done\n"
Alles anzeigen
Durch die Option -n passiert aber noch mehr, als "Reject all interactive prompts (Skip existing packages).", denn nun sieht meine Liste der installierten Pakete so aus und hat evtl. auch Probleme verursacht, denn das Nim-Example von Oscar zu GetBkColor funktioniert bei mir nicht. Andere Scripte hingegen schon... z.B. BassTest.nim, WinList.nim.
Liste der installierten Pakete anzeigen:
C:\Users\ghost>nimble list -i
c2nim [0.9.14]
cligen [1.2.0]
miniz [0.1.0]
nimbass [0.1.3, 0.2.0]
nimble [#head, 0.11.4]
nimgen [#head, 0.5.1]
nimterop [#head, 0.6.11]
regex [0.14.1, 0.16.2]
segmentation [0.1.0]
unicodedb [0.9.0]
unicodeplus [0.6.0, 0.8.0]
winim [3.3.3, 3.4.0]
wnim [0.11.0, 0.11.2, 0.11.3]
c2nim-0.9.14\
cligen-1.2.0\
miniz-0.1.0\
nimbass-0.1.3\
nimbass-0.2.0\
nimble-#head\
nimble-0.11.4\
nimgen-#head\
nimgen-0.5.1\
nimterop-#head\
nimterop-0.6.11\
regex-0.14.1\
regex-0.16.2\
segmentation-0.1.0\
unicodedb-0.9.0\
unicodeplus-0.6.0\
unicodeplus-0.8.0\
winim-3.3.3\
winim-3.4.0\
wnim-0.11.0\
wnim-0.11.2\
wnim-0.11.3\
Fehler bei GetBkColor.nim:
C:\Users\ghost\NIM\@Oscar>nim c -r "c:\Users\ghost\NIM\@Oscar\GetBkColor.nim"
Hint: used config file 'C:\Users\ghost\scoop\apps\nim\current\config\nim.cfg' [Conf]
C:\Users\ghost\.nimble\pkgs\winim-3.4.0\winim\inc\winsock.nim(1624, 83) Error: undeclared identifier: 'equalMem'
Tja... wo drückt hier der Schuh und wie biege ich es hin, dass es (wieder) funktioniert?
Sollte ich die älteren Version evtl. löschen, oder besser doch behalten? Habt ihr auch mehrere Versionen installiert?
__
C:\Users\ghost>nim -V
Nim Compiler Version 1.2.6 [Windows: amd64]
Compiled at 2020-07-29
Copyright (c) 2006-2020 by Andreas Rumpf
git hash: bf320ed172f74f60fd274338e82bdc9ce3520dd9
active boot switches: -d:release