首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Elixir库加载到iex中,而不将其添加到项目的mix.exs dep中?

如何将Elixir库加载到iex中,而不将其添加到项目的mix.exs dep中?
EN

Stack Overflow用户
提问于 2016-03-18 00:00:30
回答 3查看 17.2K关注 0票数 30

我想在不创建mix项目的情况下试用Poison json模块。

如何安装它并通过导入使其在iex中可用?

我已经能够将它添加到项目中,然后在进入项目目录并使用iex -S mix后使用它:

代码语言:javascript
复制
tbrowne@LILJEN:~/code/elixirTry/pj$ cat mix.exs
defmodule Pj.Mixfile do
  use Mix.Project

  def project do
    [app: :pj,
     version: "0.0.1",
     elixir: "~> 1.2",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  # Configuration for the OTP application
  #
  # Type "mix help compile.app" for more information
  def application do
    [applications: [:logger]]
  end

  # Dependencies can be Hex packages:
  #
  #   {:mydep, "~> 0.3.0"}
  #
  # Or git/path repositories:
  #
  #   {:mydep, git: "https://github.com/elixir-lang/mydep.git", tag: "0.1.0"}
  #
  # Type "mix help deps" for more examples and options
  defp deps do
    [{:poison, "~> 2.0"}]
  end
end
tbrowne@LILJEN:~/code/elixirTry/pj$ cat lib/pj.ex
defmodule Person do
  @derive [Poison.Encoder]
  defstruct [:name, :age]
end

defmodule Pj do
  xx = Poison.encode!(%Person{name: "Devin Torres", age: 27})
end

tbrowne@LILJEN:~/code/elixirTry/pj$ iex -S mix
Erlang/OTP 18 [erts-7.2] [source-e6dd627] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.2.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import Poison
nil
iex(2)>

然而,如果我只是进入一般目录中的普通iex,那么我似乎无法访问Poison库:

代码语言:javascript
复制
iex(4)> import IO
nil
iex(5)> puts("hello")
hello
:ok
iex(6)> import Poison
** (CompileError) iex:6: module Poison is not loaded and could not be found

另外,如何从github全局安装库?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-18 00:15:16

第一步:你想要什么?

我想在不使用Mix项目的情况下使用更多的库,比如

合并

CSV

毒药

从Github获取源代码,git签出到最新版本并编译它们。

第二步:你想把它们放在哪里?

编译完成后,创建~/.Mix/ .beam /并将光束文件移动到此目录中。

第三步:定制你的IEx

谢天谢地,

只是一个shell脚本。如果您碰巧有一个自定义

指向~/.local/bin的变量,然后将iex复制到此目录并将其重命名为如下所示

..。然后在你的习惯中

,移动到最后一行并将其更改为…

代码语言:javascript
复制
exec elixir --no-halt --erl "-user Elixir.IEx.CLI" -pa "$HOME/.mix/beam" +iex "$@"

现在,它将在启动时加载位于~/.Mix/ .beam的光束文件。

我们之所以对IEx使用不同的脚本,是为了避免与常规项目中已安装的库发生名称冲突

..。

票数 10
EN

Stack Overflow用户

发布于 2016-06-23 06:51:02

不是一个直接的答案,而是另一种可能实现你想要的方式:

您可以只生成一次游乐场项目(例如

),然后您可以相对容易地向其中添加新的依赖项。

如果你这样做了

在这个项目中,您将获得它的所有依赖项。

如果您想快速体验一下,例如

在以后的某个时间点,您可以回到这个项目中。

票数 43
EN

Stack Overflow用户

发布于 2016-03-18 23:13:44

我不知道是否有官方的方法来做到这一点。

一种方法是在本地克隆库项目,编译它,然后像这样将它添加到库路径中,方法是创建一个

脚本:

代码语言:javascript
复制
IO.puts "Adding poison to path from ~/.iex.exs"
true = Code.prepend_path("#{path_to_project}"/poison/_build/dev/lib/poison/ebin")
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36065774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档