创建 deps.edn 文件时出现问题

Problems while creating a deps.edn file

各位,我决定完全重写这个 post 以便以清晰的方式展示它。

首先感谢大家的支持。我很感激。

这是我卡住的“Clojure Workshop - Packt”中的练习:

(我的 IDE 是 IntelliJ,我正在使用 Windows)。

练习 4.10:从 CSV 文件导入数据

1.在您的计算机上方便的地方创建一个文件夹。

我决定创建一个全新的项目。

这里选择Leiningen or Deps有什么区别吗?我大部分时间都使用 Leiningen,但我应该使用 Deps 因为我要使用 deps.edn 文件吗?

2。将 match_scores_1991-2016_UNINDEXED.csv 文件下载到您创建的文件夹中。 (此处为 github

但是我应该在哪里下载这个文件呢?进入项目文件或任何文件中的 src 文件?有区别吗?

我决定保存 inside de src。

3。在您的编辑器中,在同一文件夹中,创建一个包含以下内容的 deps.edn 文件:

{:deps
 {org.clojure/data.csv {:mvn/version "0.1.4"}
  semantic-csv {:mvn/version "0.2.1-alpha1"}}}

所以,我创建了一个 deps.edn 文件。

4.通过评估 REPL 中的以下表达式来验证一切正常:

user> (require '[clojure.data.csv :as csv])
nil
user> (require '[clojure.java.io :as io])
nil
user> (with-open [r (io/reader "match_scores_1991-2016_unindexed_csv.csv")]
         (first (csv/read-csv r)))

为此项目创建了一个新的本地 Clojure REPL。

但是当我要评估测试表达式时,它在评估第二个和第三个时显示错误。

As you can see here.

评估“clojure.data.csv :as csv”时出现的错误是:

Execution error (FileNotFoundException) at csv-example.core/eval1549 (form-init2604783929697477049.clj:1).
Could not locate clojure/data/csv__init.class, clojure/data/csv.clj or clojure/data/csv.cljc on classpath.

我错过了什么?已经尝试了几天来解决这个问题,但我没有找到任何答案。

谢谢!

我会尽量回答这里的所有问题,带你进入下一阶段:

  1. Leiningen 使用 project.clj 文件。 Clojure CLI 使用 deps.edn 文件。由于本书要求您创建一个 deps.edn 文件,因此您需要使用 Clojure CLI 而不是 Leiningen 来启动 REPL and/or 运行 代码。更多内容请见下文。

  2. 本书希望您将 .csv 文件下载到您在第 1 步中创建的任何文件夹。包含您的 deps.edn 文件的文件夹。查看您的屏幕截图,您似乎要求 Cursive/IntelliJ 创建一个基于 Leiningen 的项目。如果你重新开始并要求 Cursive/IntelliJ 创建一个基于 Deps 的项目,你将在项目顶部有一个 deps.edn 文件,你可以编辑它以使其看起来像书中想要的那样,并且你最终会得到:

  • deps.edn
  • match_scores_1991-2016_unindexed.csv
  • src

(也许 Cursive/IJ 可能会创建一些其他文件)

  1. 根据我在上面 2 中的评论,您将有一个 deps.edn 文件——由 Cursive/IJ 创建——你可以在项目。

  2. 你得到的错误是因为你创建了一个 Leiningen 项目,然后启动了一个 Leiningen REPL -- 它不知道 deps.edn 所以它不会看到你添加到那里(即使你把它放在项目的顶部,project.clj 旁边)。所以 Leiningen 不知道您需要 CSV 库,因此当您尝试 require 它时它在 REPL 中不可用——并且因为 require 失败,您没有得到 csv 别名,因此对 csv/read-csv 的调用无法编译。

关于 Clojure CLI 的两点:

一个。它比 Leiningen 使用起来简单得多,并且在项目中需要的结构要少得多。您可以在命令行手动创建一个基于 Deps 的项目。打开命令提示符 (cmd.exe),您可以执行以下操作:

C:\Users\seanc>mkdir myproject

C:\Users\seanc>cd myproject

C:\Users\seanc\myproject>notepad deps.edn

C:\Users\seanc\myproject>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 4459-1FFE

 Directory of C:\Users\seanc\myproject

01/05/2021  02:24 PM    <DIR>          .
01/05/2021  02:24 PM    <DIR>          ..
01/05/2021  02:25 PM               101 deps.edn
               1 File(s)            101 bytes
               2 Dir(s)  158,998,511,616 bytes free

(然后您可以将 .csv 文件下载到 myproject 中,然后按照本书可能向您展示的方式启动 REPL——我希望它建议您 运行 clj 该文件夹中的命令)

b。这就是您 运行 遇到问题的地方:Windows 在 Clojure 世界中没有得到很多工具和库的很好支持——几乎所有 Clojure 开发人员都使用 Mac 或 Linux .即使那些使用 Windows 的人通常也使用 WSL2(在 Windows 10 上)和 Linux 风格,例如 Ubuntu。因为这比尝试使用 Windows.

上的工具更容易

Windows 上有可用于 Powershell 的 Clojure CLI 预发布版本:https://github.com/clojure/tools.deps.alpha/wiki/clj-on-Windows

如该页底部所述,安装 Scoop 然后使用它来安装 Clojure CLI 更容易。然后使用 Powershell 而不是命令提示符。

我不知道您对 WSL2/Linux 或 Powershell 有何看法——由于您是编程新手,我怀疑这一切看起来都有些复杂且相当令人生畏。您可能会考虑放弃“The Clojure Workshop”(Packt 书籍通常不是很好)并找到另一本书或在线教程,引导您使用 Leiningen 完成 (最好在 Windows——但这可能很难找到,因为很少有 Clojurians 使用 Windows) 并尝试使用 Cursive/IJ.

来解决 material

如果您选择使用 deps.edn,您可以按照 Sean Corfield 在 post 上的评论来解决问题。

或者,如果您更喜欢 leiningen,只需添加

即可解决

[org.clojure/data.csv   "1.0.0"]
[semantic-csv           "0.2.1-alpha1"]

在 project.clj 文件中的 :dependencies 键。