【问题标题】:Problems while creating a deps.edn file创建 deps.edn 文件时出现问题
【发布时间】:2021-04-09 03:02:29
【问题描述】:

各位,我决定完全重写这篇文章,以便清楚地展示它。

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

这是“The Clojure Workshop - Packt”中我遇到困难的练习:

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

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

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

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

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

2。将 match_scores_1991-2016_UNIDEXED.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.

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

谢谢!

【问题讨论】:

  • 很难说你遇到了什么问题。第 3 步可以用任何编辑器完成。 deps.edn 是一个文本文件。您能解释一下您尝试过的方法以及似乎不起作用的方法吗?
  • 肖恩,我无法理解那些东西:“在你的编辑器中”(在 INTELIJ 中?在 REPL 中?)“在同一个文件夹中”(但文件夹在桌面上,我应该把它转移到IJ 中的 src 文件夹?)“创建一个 deps.edn 文件”(再次,在哪里?他所说的“编辑器”指的是什么?IJ、Windows PowerShell 或 txt 文件?对不起@sean 的菜鸟问题。我是从 clojure 和编程开始。
  • 您是否创建了 IntelliJ 项目?如果是这样,您可以转到项目视图,右键单击顶级文件夹并转到 New -> File 并创建一个 deps.edn 文件。 deps.edn 应该在项目文件夹的顶层。
  • 您正在阅读的这本书可能会假设您具有更多的编程背景,因此在此之后可能会遇到其他障碍;总体而言,这是一条艰难而令人沮丧的道路。作为第一个练习的 csv 文件是一个非常陡峭的开始!您会考虑另一种入门指南吗?作为一个伟大的、可读的、有趣的介绍的例子,我会提名“Think Python:如何像计算机科学家一样思考”。当然,如果您为 Clojure 找到一个,那就更好了;但我最喜欢的“勇敢而真实的 Clojure”假定您熟悉编辑器、文件、文件夹的问题。
  • 这里要明确一点:说明要您创建一个新文件夹(在任何地方)。例如。创建ex410。然后在其中添加一个新的deps.edn 文件(如果有疑问,请使用您的常规编辑器而不是 intellij 添加它,因为它想要打开项目根目录并且不是一个很好的通用编辑器),其中包含说明中的内容。然后从 intellij 打开目录。如果您安装了插件(例如草书),它应该检测到 clojure 项目。

标签: clojure clojure-java-interop clojure-contrib


【解决方案1】:

我将尝试在这里回答所有问题并带您进入下一阶段:

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

  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. 中的我的 cmets,您将在项目顶部拥有一个由 Cursive/IJ 创建的 deps.edn 文件,您可以对其进行编辑。

  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.这就是您遇到问题的地方:Clojure 世界中的许多工具和库都不能很好地支持 Windows —— 几乎所有 Clojure 开发人员都使用 Mac 或 Linux。即使是那些使用 Windows 的人,通常也会使用 WSL2(在 Windows 10 上)和 Linux 风格,例如 Ubuntu。因为这比尝试在 Windows 上使用这些工具更容易。

有一个预发布版本的 Clojure CLI 可用于 Windows 上的 Powershell: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 来处理这些材料。

【讨论】:

  • 您也可以考虑加入 Clojurians Slack,在那里您可以与其他初学者聊天并获得实时建议,这可能会帮助您更快地入门:clojurians.net 自我注册,@ 987654323@聊天。
  • 谢谢@SeanCorfield,我非常感谢您为帮助我所做的努力!
【解决方案2】:

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

或者,如果你更喜欢 leiningen,你可以通过添加来解决这个问题


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多