【问题标题】:Elixir library application path to scriptsElixir 库应用程序脚本路径
【发布时间】:2017-09-11 08:21:06
【问题描述】:

我有一个 Python 脚本,它作为我正在编写的 Elixir 库的一部分运行 - 也就是说,在启动应用程序时,我在我的一个 start_link 函数中运行 System.cmd("python", [path/to/script], [])

我将脚本安装在用户的 deps/mylibrary/lib 文件夹中。

path/to/script 是我不知道该怎么做的部分 - 我可以通过评估 System.cwd() 并查看结果来推断脚本所在的位置,但这似乎是错误的。

我认为必须有一种方法可以使用 Mix 来做到这一点。

【问题讨论】:

  • 我通常使用Path.expand__DIR__ 来获取相对于当前源文件的路径,例如Path.expand("path/to/script", __DIR__)。你能看看这对你有用吗? (您可能需要使用../path/to/script../../path/to/script,具体取决于您从哪个文件调用它。)
  • @Dogbert 是的,这行得通!但我也想知道这是否是规范的做法。似乎许多 Elixir 库必须具有非 Elixir 依赖项。这些通常像我一样安装在 deps/whatever/lib 中吗?
  • 我相信你想在运行时访问的文件应该放在priv/ 文件夹中,然后你可以确定你可以使用:code.priv_dir(:my_package) 从你的代码中访问它们。请参阅stackoverflow.com/questions/43414104/… 和我的评论。
  • @Dogbert 是的,这行得通。我想这可能就是这样做的方法。如果你想写一个答案,我会接受。谢谢!

标签: elixir elixir-mix


【解决方案1】:

库/包在运行时需要的文件应存储在priv/ 文件夹中。该目录中的所有内容都将出现在由例如创建的 Erlang Releases 中。酒厂。在运行时,可以通过:code.priv_dir/1返回的路径知道包的priv目录的位置。

因此,如果您的 Python 脚本位于 priv/foo/bar.py 中,您可以使用以下命令获取该文件的绝对路径:

Path.join(:code.priv_dir(:my_package), "foo/bar.py")

:my_package 是您的包的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2013-09-06
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多