ABOUT ME

-

Total
-
  • Elixir에서 Python 이용하기
    컴퓨터/파이썬 2020. 11. 21. 16:38
    728x90
    반응형

    Elixir

     

    elixir-lang.github.com

    Website for Elixir

    elixir-lang.org

     

    1. 사전 준비

    Elixir 설치 @링크

     

    새 프로젝트 만들기 (콘솔)

    mix new project_name

     

    mix.exs에 Export 라이브러리 추가

    Export 라이브러리 @링크: 이 라이브러리는 Elixir에서 Ruby와 Python을 쉽게 사용할 수 있게 해줌.

    defmodule Pyelixir.MixProject do
      use Mix.Project
    
      def project do
        [
          app: :pyelixir,
          version: "0.1.0",
          elixir: "~> 1.11",
    
          start_permanent: Mix.env() == :prod,
          deps: deps()
        ]
      end
    
      def application do
        [
          extra_applications: [:logger]
        ]
      end
    
      # 아래에 export 추가하기
      defp deps do
        [
          {:export, "~> 0.1.0"}
        ]
      end
    end
    

     

    Export 예제

    defmodule SomePythonCall do
      use Export.Python
    
      def call_python_method do
        # path to our python files
        {:ok, py} = Python.start(python_path: Path.expand("lib/python"))
    
        # call "upcase" method from "test" file with "hello" argument
        py |> Python.call("test", "upcase", ["hello"])
    
        # same as above but prettier
        val = py |> Python.call(upcase("hello"), from_file: "test")
    
        # close the Python process
        py |> Python.close()
    
        val
      end
    end

     

    설치 (콘솔)

    mix deps.get

     

    예제 프로젝트 폴더/파일은 아래와 같이 생겼다.

    └── pyelixir
        ├── lib
        │   ├── pyelixir
        │   │   └── test.ex
        │   ├── python
        │   │   └── test.py
        │   └── pyelixir.ex
        ├── mix.exs
        └── …

     

    2. 파이썬 불러오기

    test.py


    아래 test.py는 노드를 만들고 노드의 값을 출력하는 프로그램이다.

    class Node:
        def __init__(self, val):
            self.val = val
    
    
    def create():
        for i in range(1, 10):
            n = Node(i)
            print("Hi, {}".format(n.val))
    

     

    pyelixir.ex

    defmodule Pyelixir do
      use Export.Python  # 파이썬 caller
    
      @python_dir "lib/python"  # 파이썬 파일 위치 경로
    
      def python_call(file, function, args \\ []) do
        {:ok, py} = Python.start(python_path: Path.expand(@python_dir))
        Python.call(py, file, function, args)
      end
    end
    

     

    pyelixir/test.ex

    defmodule Pyelixir.Test do
      import Pyelixir, only: [python_call: 2]
    
      @python_module "test"
    
      def create do
        python_call(@python_module, "create")  # create 함수 불러오기
      end
    
    end
    

     

    3. 실행

    아래 명령어로 컴파일 후,

    iex -S mix

     

    Pyelixir.Test.create() 함수를 직접 불러오면, 아래와 같이 나온다.

     

    참고

    pycall 함수 @Github Gist

    Export 라이브러리 @Github

    728x90

    댓글