Как импортировать зависимости эликсира в текущий файл / модуль
Я пытаюсь использовать пакет Hex CSV.
Я добавил зависимость в mix.exs примерно так:
def application do
[applications: [:logger, :csv]]
end
defp deps do
[
{:csv, "~> 1.4.2"}
]
Затем я бегу mix deps.get
& mix deps.compile
в терминале.
Папка зависимостей отображается в папке deps.
Кажется, все в порядке, пока я не попытаюсь использовать зависимость. Я получаю эту ошибку:
"модуль CSV не загружен и не может быть найден"
Я попытался просто использовать без импорта, вот так:
File.stream!("data.csv") |> CSV.decode
Я попытался импортировать так:
import(CSV)
File.stream!("data.csv") |> CSV.decode
Я пробовал префикс каталога deps:
import(deps.CSV)
File.stream!("data.csv") |> CSV.decode
И полный путь к подкаталогу deps:
import(deps.csv.lib.csv.CSV)
File.stream!("data.csv") |> CSV.decode
Неважно, что он не находит модуль зависимости.
Что мне не хватает?
0 ответов
Я предполагаю, что ваша IDE неправильно сконфигурирована. Вот пример командной строки того, как начать работу.
mix new csv_tester
cd csv_tester
# edit mix.exs to add {:csv, "~> 1.4"} to your deps, like you have above
mix deps.get
iex -S mix
iex(1)> [["name", "age"], ["Bob Saget", 64]] |> CSV.encode() |> Enum.join("")
"name,age\r\nBob Saget,64\r\n"
Модули доступны по всему миру, поэтому вам не нужно использовать import
за исключением случаев, когда вам нужна только определенная функция в данном модуле или если вы не хотите полностью уточнять вызов функции с помощью имени модуля. См. Документацию по импорту.
Все, что вы можете выполнить в iex
вы должны иметь возможность звонить из любого другого модуля в вашем проекте
Если вам все еще нужна помощь в отладке, вы можете запустить это в iex, чтобы вывести список всех модулей, которые должны быть доступны во время выполнения, а затем отфильтровать все, что содержит CSV в имени модуля:
iex(1)> :code.get_path() |>
Enum.map(&to_charlist/1) |>
Enum.map(&:erl_prim_loader.list_dir/1) |>
Enum.map(&elem(&1, 1)) |>
Enum.concat() |>
Enum.map(&to_string/1) |>
Enum.filter(fn module -> module =~ "CSV" end)
Что должно вывести что-то вроде этого
["Elixir.CSV.Encode.beam", "Elixir.CSV.Encoder.beam", "Elixir.CSV.beam",
"Elixir.CSV.Lexer.EncodingError.beam", "Elixir.CSV.LineAggregator.beam",
"Elixir.CSV.Parser.beam", "Elixir.CSV.Lexer.beam",
"Elixir.CSV.Encode.BitString.beam",
"Elixir.CSV.LineAggregator.CorruptStreamError.beam", "Elixir.CSV.Decoder.beam",
"Elixir.CSV.Decoder.RowLengthError.beam", "Elixir.CSV.Encode.beam",
"Elixir.CSV.Parser.SyntaxError.beam", "Elixir.CSV.Encode.Any.beam",
"Elixir.CSV.Defaults.beam"]