Как загрузить библиотеку Elixir в iex, не добавляя ее в проект mix.exs?

Я хочу опробовать модуль Poison json без создания проекта микширования.

Как его установить и сделать доступным в iex через импорт?

Мне удалось добавить его в проект, а затем использовать его после перехода в каталог проекта и с помощью команды iex -S:

[email protected]:~/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
[email protected]:~/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

[email protected]:~/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:

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?

Ответы

Ответ 1

Я могу порекомендовать вам этот пост в блоге.


1-й шаг: что вы хотите?

Есть более пары библиотек, которые я хочу использовать без проекта Mix, например

  • скомбинировать
  • CSV
  • отрава

Получить их исходники из Github, git checkout до последнего выпуска и скомпилировать их.

2-й шаг: где вы их хотите?

Одна компиляция была закончена, создайте ~/.mix/beam/и переместите файлы.beam в этот каталог.

3-й шаг: теперь давайте настроим вашу интерактивную оболочку EliXir!

К счастью, iex - это всего лишь сценарий оболочки. Если у вас есть переменная $ PATH, которая указывает на ~/.local/bin, скопируйте iex в этот каталог и переименуйте его в deviex. Затем в вашем обычном deviex, перейдите к последней строке и измените его на...

exec elixir --no-halt --erl "-user Elixir.IEx.CLI" -pa "$HOME/.mix/beam" +iex "[email protected]"

И теперь он загрузит файлы.beam, расположенные в ~/.mix/beam при запуске.

Причина, по которой мы используем другой сценарий для IEx, заключается в том, чтобы избежать конфликтов имен с установленными библиотеками в проектах, над которыми вы будете работать с обычным iex.

Ответ 2

Не прямой ответ, но еще один способ добиться того, чего вы хотите:

У вас может быть проект детской площадки, который вы создадите один раз (например, mix new playground), и тогда вы можете легко добавить новые зависимости.

Если вы выполняете iex -S mix в этом проекте, вы получите все его зависимости.

Если вы хотите быстро поэкспериментировать с, например, Poison в какой-то более поздний момент времени, вы можете просто вернуться в этот проект.

Ответ 3

Я не знаю, есть ли официальный способ сделать это.

Один из способов - локально локализовать проект библиотеки, скомпилировать его, а затем добавить его в путь библиотеки, как это, создав ~/.iex.exs script:

IO.puts "Adding poison to path from ~/.iex.exs"
true = Code.prepend_path("#{path_to_project}"/poison/_build/dev/lib/poison/ebin")