我正在尝试使用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 :(得分: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
语句名称。请参阅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"]