#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:
Я постараюсь ответить на все вопросы здесь и перейти к следующему этапу:
- Лейнинген использует
project.clj
файл. Clojure CLI используетdeps.edn
файл. Поскольку в книге предлагается создатьdeps.edn
файл, вам нужно будет использовать Clojure CLI, а не Leiningen, для запуска REPL и / или запуска кода. Подробнее об этом ниже. - В книге предполагается, что вы загрузите
.csv
файл в любую папку, которую вы создали на шаге 1. Папка, в которой содержится вашdeps.edn
файл. Глядя на ваши скриншоты, похоже, что вы попросили Cursive / IntelliJ создать проект на основе Leiningen. Если вы начнете снова и попросите Cursive / IntelliJ создать проект на основе Deps, у вас будетdeps.edn
файл в верхней части проекта, который вы можете отредактировать, чтобы он выглядел так, как требуется в книге, и в итоге вы получите:
deps.edn
match_scores_1991-2016_unindexed.csv
src
(и, возможно, некоторые другие файлы, которые может создать Cursive / IJ)
- Согласно моим комментариям в разделе 2. выше, у вас будет
deps.edn
файл, созданный с помощью Cursive /IJ, который вы можете редактировать в верхней части проекта. - Ошибка, которую вы получили, заключалась в том, что вы создали проект 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.