我正在学习clojure,我想将它用于一些简单的事情,就像我使用python一样。
例如,我想在一个充满CSV文件的目录中创建一个.clj文件,然后用一些CSV库将它们稍微晃一下,而不用整个项目。
在python中我创建一个.py文件,顶部只有import csv
。我可以在clojure中这样做吗?
如果没有,那么做一个像这样的小脚本最简单的方法是什么?
到目前为止,我发现的一切都说我需要一个新的lein项目来对这样的库做任何事情。
答案 0 :(得分:4)
boot
构建工具您可以将boot
用于此目的。它是一个构建工具,允许您编写执行任务的standalone scripts(因此它不必包含所有项目结构)。在脚本中,您可以指定所需的所有依赖项,使用其他任务或定义您的任务。只需安装boot
并编写脚本即可。
例如,要创建一个小脚本来读取命令行中提供的CSV文件,您可以编写以下内容(例如read-csv.boot
):
#!/usr/bin/env boot
(set-env! :dependencies '[[org.clojure/data.csv "0.1.3"]])
(require '[boot.cli :refer [defclifn]]
'[clojure.data.csv :as csv]
'[clojure.java.io :as io])
(defclifn -main
[f file FILE str "input CSV file"]
(println "Reading" file)
(with-open [in-file (io/reader file)]
(->> in-file
(csv/read-csv)
(println))))
使其可执行:
$ chmod +x read-csv.boot
并使用它:
$ ./read-csv.boot -f input.csv
Reading input.csv
([1 2 3])
python
在Clojure(和Java)中,依赖关系管理与Python有点不同。在Python中,库作为全局包安装在系统中,默认情况下安装了许多库。您还可以使用pip
等工具,以便全局安装其他软件包。 Clojure和Java通常在您的项目中使用Maven依赖项(并且不安装它们并使其全局可用),这需要诸如构建工具之类的工具(例如maven
,ivy
,lein
或{{ 1}})设置应用程序类路径。
答案 1 :(得分:2)
看看inlein
,这看起来非常整洁:
#!/usr/bin/env inlein
'{:dependencies [[org.clojure/clojure "1.8.0"]
[clojure-csv/clojure-csv "2.0.1"]]}
(require '[clojure-csv.core :as csv])
(println "Reading: " (first *command-line-args*))
(-> *command-line-args*
first
slurp
csv/parse-csv
println)
(System/exit 0)
由于启动了后台守护进程,它的启动时间也令人印象深刻。