2017-04-15 4 views
1

필자가 작성한 엘릭서 라이브러리의 일부로 실행되는 Python 스크립트가 있습니다. 즉, 응용 프로그램을 시작할 때 을 내 start_link 함수 중 하나에서 실행합니다.스크립트에 대한 엘릭서 라이브러리 응용 프로그램 경로

사용자의 deps/mylibrary/lib 폴더에 스크립트를 설치합니다.

path/to/script은 내가 어떻게 해야할지 모르겠다. 나는 System.cwd()을 평가하고 그 결과를보고 스크립트가 어디에 있는지 추론 할 수있다. 그러나 이것은 잘못된 것처럼 보인다.

믹스를 사용하여이를 수행 할 수있는 방법이 있어야한다고 생각합니다.

+0

나는 현재 소스 파일에 상대적인 경로를 얻기 위해 보통'Path.expand'와'__DIR__'을 사용합니다. 'Path.expand ("path/to/script", __DIR __)'. 이게 효과가 있는지 볼 수 있니? (당신이 호출하는 파일에 따라'../ path/to/script' 또는'../../ path/to/script'를해야 할 것입니다.) – Dogbert

+0

@Dogbert 예, 저것 공장! 그러나 이것이 이것을 수행하는 표준 방법인지 궁금합니다. 많은 Elixir 라이브러리가 비 엘릭서 의존성을 가져야 만합니다. 이것들은 일반적으로 deps/whatever/lib에 설치되어 있습니까? – MaxStrange

+1

런타임에 액세스하고자하는 파일을'priv /'폴더에 넣어야하고': code.priv_dir (: my_package)'를 사용하여 코드에서 액세스 할 수 있는지 확인할 수 있습니다. http://stackoverflow.com/questions/43414104/read-files-in-phoenix-in-production-mode 및 내 의견을 참조하십시오. – Dogbert

답변

2

런타임에 라이브러리/패키지에 필요한 파일은 priv/ 폴더에 저장해야합니다. 이 디렉토리의 모든 내용은 Erlang Releases에 있습니다. 증류소. 런타임에 :code.priv_dir/1에 의해 반환 된 경로를 사용하여 패키지의 priv 디렉토리의 위치를 ​​알 수 있습니다. 파이썬 스크립트 priv/foo/bar.py에있는 경우

그래서, 당신은 사용하여 해당 파일의 절대 경로를 얻을 수 있습니다 : :my_package는 패키지의 이름입니다

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

.