Проблемы при создании файла deps.edn

#clojure #clojure-java-interop #clojure-contrib

#clojure #clojure-java-interop #clojure-contrib

Вопрос:

Люди, я решил полностью переписать этот пост, чтобы показать его в понятном виде.

Прежде всего, спасибо за поддержку. Я ценю это.

Это упражнение в «The Clojure Workshop — Packt», где я застрял:

(Моя среда IDE — IntelliJ, и я использую Windows).

Упражнение 4.10: Импорт данных из файла CSV

1. Создайте папку в удобном месте на вашем компьютере.

Я решил создать совершенно новый проект.

Есть ли здесь какая-либо разница при выборе между Leiningen или Deps? Я большую часть времени использую Leiningen, но должен ли я использовать Deps, потому что я собираюсь использовать файл deps.edn?

2. Загрузите файл match_scores_1991-2016_UNINDEXED.csv в созданную вами папку. (здесь, на github)

Но где я должен загрузить этот файл? В файл src внутри файла проекта или любой файл работает? Есть ли какая-то разница?

Я решил сэкономить внутри 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 для этого проекта.

Но когда я собираюсь оценить тестовые выражения, он показывает ошибку при оценке второго и третьего.

Как вы можете видеть здесь.

Ошибка при оценке «clojure.data.csv: как 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. Трудно сказать, с чем у вас проблемы. Шаг 3 может быть выполнен с помощью любого редактора. deps.edn — это текстовый файл. Можете ли вы объяснить, что вы пробовали, а что, похоже, не работает?

2. Шон, я не могу понять эти вещи: «В твоем редакторе» (Внутри INTELIJ? В REPL?) «В той же папке» (но папка находится на рабочем столе, должен ли я перенести ее в папку src внутри IJ?) «создать файл deps.edn» (опять же, где? что он имеет в виду под «редактором»? IJ, Windows PowerShell или текстовый файл? Извините за вопрос новичка @sean. Я начинаю с clojure и программирования.

3. Вы создали проект IntelliJ? Если это так, вы можете перейти к просмотру проекта, щелкнуть правой кнопкой мыши на папке верхнего уровня и перейти New -> File к созданию deps.edn файла. deps.edn должен находиться на верхнем уровне папки проекта.

4. Книга, которую вы читаете, может предполагать больше знаний о программировании, так что за этой могут последовать другие препятствия; трудный и удручающий путь в целом. CSV-файл в качестве первого упражнения — это очень крутой старт! Не могли бы вы рассмотреть другое руководство для начала? В качестве примера отличного, читаемого и интересного вступления я бы назвал «Think Python: как мыслить как специалист по информатике». Конечно, если вы найдете что-то для Clojure, тем лучше; но мой любимый, «Clojure для смелых и настоящих», предполагает знакомство с редакторами, файлами, папками.

5. Просто для ясности: инструкции хотят, чтобы вы создали новую папку (в любом месте). Например. создать ex410 . Затем добавьте туда новый deps.edn файл (если сомневаетесь, добавьте его с помощью обычного редактора, а не intellij, поскольку он хочет открыть корни проекта и не является отличным редактором общего назначения) с содержимым из инструкций. Затем откройте каталог из intellij. Он должен обнаружить проект clojure, ЕСЛИ у вас установлен плагин (например, cursive).

Ответ №1:

Я постараюсь ответить на все вопросы здесь и перейти к следующему этапу:

  1. Лейнинген использует 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. выше, у вас будет deps.edn файл, созданный с помощью Cursive /IJ, который вы можете редактировать в верхней части проекта.
  2. Ошибка, которую вы получили, заключалась в том, что вы создали проект Leiningen, а затем запустили Leiningen REPL — и он не знает об deps.edn этом, поэтому он не увидит, что вы туда добавили (даже если бы вы поместили это в начало проекта, рядом с project.clj ). Итак, Лейнинген не знал, что вам нужна библиотека CSV, и поэтому она была недоступна в REPL, когда вы пытались require ее использовать — и из-за require сбоя вы не получили csv псевдоним, и поэтому вызов csv/read-csv не удалось скомпилировать.

Два момента о Clojure CLI:

a. Он существенно проще в использовании, чем Leiningen, и требует гораздо меньше структуры в проекте. Вы можете создать проект на основе Deps вручную в командной строке. Откройте командную строку ( cmd.exe ), и вы можете сделать следующее:

 C:Usersseanc>mkdir myproject

C:Usersseanc>cd myproject

C:Usersseancmyproject>notepad deps.edn

C:Usersseancmyproject>dir
 Volume in drive C is Local Disk
 Volume Serial Number is 4459-1FFE

 Directory of C:Usersseancmyproject

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 команду в этой папке)

б. И вот где вы сталкиваетесь с проблемой: Windows не очень хорошо поддерживается множеством инструментов и библиотек в мире Clojure — почти все разработчики Clojure используют либо Mac, либо Linux. Даже те, кто использует Windows, обычно используют WSL2 (в Windows 10) и версию Linux, такую как Ubuntu. Потому что это проще, чем пытаться работать с инструментами в Windows.

Для Powershell в Windows доступна предварительная версия 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 — но это может быть трудно найти, поскольку Windows используют так мало пользователей Clojurians) и попытатьсяпроработайте этот материал с помощью Cursive/IJ.

Комментарии:

1. И вы также можете подумать о присоединении к Clojurians Slack, где вы можете общаться с другими новичками и получать советы в режиме реального времени, что, вероятно, поможет вам быстрее начать работу: clojurians.net для самостоятельной регистрации, clojurians.slack.com чтобы поболтать.

2. Спасибо @SeanCorfield, я действительно ценю ваши усилия в попытке помочь мне!

Ответ №2:

Вы можете решить проблему, выполнив то, что прокомментировал Шон Корфилд в своем посте, если решите использовать deps.edn.

Или, если вы предпочитаете лейнинген, вы можете решить эту проблему, просто добавив

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

 

в разделе :dependencies внутри файла project.clj.

внутри файла project.clj.