Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Elixir库加载到iex中而不将其添加到项目';是混合的吗?_Elixir - Fatal编程技术网

如何将Elixir库加载到iex中而不将其添加到项目';是混合的吗?

如何将Elixir库加载到iex中而不将其添加到项目';是混合的吗?,elixir,Elixir,我想在不创建混合项目的情况下试用Poison json模块 如何安装它并通过导入在iex中提供 我已经能够将它添加到项目中,然后在进入项目目录并使用iex-S mix后使用它: 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: "~

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

如何安装它并通过导入在iex中提供

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

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,那么我似乎无法访问毒药库:

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全局安装库?

第一步:您想要什么? 我想在没有混合项目的情况下使用多个库,比如

  • 结合
  • CSV
  • 毒药
从Github、git checkout获取它们的源代码,直到最后一个版本并编译它们

第二步:你想把它们放在哪里? 编译完成后,创建~/.mix/beam/并将.beam文件移动到此目录中

第三步:定制IEx 谢天谢地,
iex
只是一个shell脚本。如果您碰巧有一个指向~/.local/bin的自定义
$PATH
变量,则将iex复制到此目录,并将其重命名为类似于
deviex
的名称。 然后在自定义
deviex
中,移动到最后一行并将其更改为

exec elixir --no-halt --erl "-user Elixir.IEx.CLI" -pa "$HOME/.mix/beam" +iex "$@"
现在它将在启动时加载位于~/.mix/beam的.beam文件


我们为IEx使用不同脚本的原因是为了避免与您将使用常规
IEx的项目中安装的lib发生名称冲突,我不知道是否有正式的方法来实现这一点

一种方法是在本地克隆库项目,对其进行编译,然后通过创建
~/.iex.exs
脚本将其添加到库路径,如下所示:

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

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

您可以有一个游乐场项目,您只需生成一次(例如,
mixnewplayerd
),然后您就可以相对轻松地向其中添加新的依赖项

如果您在这个项目中执行
iex-S mix
,您将获得它的所有依赖项


如果您想在以后的某个时间点快速尝试使用例如
Poison
,您可以回到这个项目。

那么在python中没有类似的方法,我的意思是全局安装一个库(
sudo pip install foo
),并从任何交互式shell(
ipython
)从任何目录导入它?(不说虚拟环境)Thx。这应该更好地放在一个函数中,只有当你真的不在任何项目中时才调用它,否则可能会导致奇怪的效果。只链接的答案是不受欢迎的。请在回答中包括相关材料。哦,是的,当然可以。很抱歉,您甚至可以添加一个shell别名,例如
alias pmix=“cd~/playerd&&iex-S mix&&cd-”
(确认与bash一起使用)要跳转到该目录,请打开控制台,然后在退出控制台时跳回原来的位置。Elixir 1.12.0将实验性地引入
Mix.install/2
在脚本文件顶部声明DEP,而不需要完全混合项目。可能接近你要找的东西。