下面的代码应该安装colorize,使用它,然后卸载包:
#!/usr/bin/env racket
#lang racket
(system "raco pkg install colorize")
(require colorize)
(display (colorize "Italic" 'default #:style 'italic))
(newline)
(system "raco pkg remove colorize")它不起作用--尽管require在调用system Racket之前试图在执行(system "raco pkg install colorize")之前执行(require colorize)。
在Python中,我用try解决了类似的问题,例如:
from subprocess import run
from sys import modules
try:
from bs4 import BeautifulSoup
except:
run("pip3 install beautifulsoup4", shell=True)
from bs4 import BeautifulSoup
#The rest of the code that does scraping.在Bash中,我会使用if或&&。如何在Racket中解决这个问题,以便自动地安装依赖项。
我知道,从安全的角度来看,我想要达到的目标可能不是好的实践,但让它超出问题的范围。
发布于 2022-07-04 09:41:50
我认为做这样的事是不可能的。考虑如何编译这样的程序,例如:您需要的模块在编译时根本不可用。
解决这个问题的正确方法是为这样的事情编写包装器,以确保正确的包被安装。
然而,这种可怕的虐待--差不多有一半的效果。但是不要用这个:写一个包装:它没有那么难。
#!/usr/bin/env racket
#lang racket
;;; DO NOT USE THIS. May explode on contact. Harmful to fish.
;;;
(begin-for-syntax
(require pkg pkg/lib)
(when (not (member "colorize" (installed-pkg-names)))
(pkg-install-command "colorize" #:auto #t)))
(require colorize)
...https://stackoverflow.com/questions/72852262
复制相似问题