2017-03-09 3 views
0

일부 작은 기능을 작성하고 사용하기 위해 이맥스 조직 모드 바벨 소스 코드 블록을 사용하고 있습니다. 이제 좀 더하고 싶습니다. 잠시 후에, Org-babel에서 작성한 함수가 재사용에 유용하다는 것을 알았습니다.이를 개인 Python 패키지 (예 : my_tools)에 넣기를 원합니다.다른 파일의 소스 코드를 결합하십시오.

그래서 조직 - 바벨 내가 func1 및 파일의 func2을 가지고 examples.py라는 파일로 추출 소스 코드를 가지고 말할 수, 소스 코드의 추출을 제공합니다. 이 함수를 파이썬 파일/모듈에 추가하려면 my_functions.py, 파이썬 패키지 나 모범 사례를 사용하면 소스 코드 func1, func2이 모듈에 삽입됩니까?

저에게 파이썬으로 작업 할 때 보통 한 동안 시도하려고했던 것입니다. 나중에 한 번 사용하기 위해 코드를 작성하고 나중에 코드/함수가 반복적으로 재사용 될 수 있습니다. , 우리는 그것을 패키지에 저장하여 쉽게 설치하고 다른 사람들과 공유 할 수 있습니다.

코드를 추출하여 패키지 모듈에 삽입 할 때 태그 정보를 기반으로 삽입 할 위치를 알 수 있도록 코드에 태그를 추가 할 수도 있습니다. 나는이 시나리오를 위해 이미 PyPI 패키지가 있는지를 알기 위해 여기에 약간의 퍼지를 달았습니다. 아니면 내가 직접 패키지를 만들고 싶다면 어떻게 패키지를 설계해야합니까? 나는 그 경험이 아니며 이것에 대한 의견을 듣고 싶습니다.

+0

이 이상한 요청처럼 보인다. 처음에는 모듈에 함수를 작성하지 않는 것이 어떻습니까? –

+0

@ juanpa.arrivillaga 제 생각에 그는 단지 설치 가능한 패키지를 만드는 것에 대해 이야기하고 있다고 생각합니다. 그 질문은 대답 할 것이기 때문입니다. 일단 그가 패키지를 만들고 설치하면, 그는 어디서나 그 방법을 사용할 수있을 것입니다. – lordingtar

+0

@lordingtar Emacs Org-mode Babel을 사용하지 않기 때문에, OP가 무엇을 원하는지 완전히 확신하지 못합니다. 그러나 개별 소스 파일의 특정 기능을 프로그래밍 방식으로 "잘라내어 붙여 넣기"하여 새 패키지 모듈에 추가하려고합니다. "코드를 추출하여 패키지 모듈에 삽입 할 때 태그 정보를 기반으로 삽입 할 위치를 알 수 있도록 태그에 코드를 추가 할 수도 있습니다." –

답변

0

나는 물건을 간단하게 유지하는 것을 크게 좋아합니다. 귀하의 요구 사항이 정확히 을 이해한다면, 파이썬 코드를 실행하지 않고 에 사용 된 결과를 가져 오기보다는 파이썬 소스 파일과 모듈을 생성하는 것이 가장 중요합니다.

이 경우 가장 좋은 방법은/tools/모듈을 나타내는 인 org 파일을 만드는 것입니다. 다른 파일/프로젝트에서 계속 사용하고 도구 모듈에 들어가야하는 기능 등을 발견하면 해당 기능 코드 블록을 해당 문서 등을 포함하여 모듈을 나타내는 org 파일에 추가하십시오. 그런 다음 해당 모듈 을로드하고 해당 기능을 참조하는 프로그램의 다른 코드 블록을 나타내는 다른 조직 파일 을 업데이트하십시오. 당신이 테스트 등이 방법을 통합하는 코드를 실행하는 조직의 의 일부 기능을 사용할 수 있습니다 당신의 도구 모듈을 대표하는 조직 파일에서

, 당신은 당신의 조직 파일을로드 할 수 있으며 모든 varify하기 위해 테스트를 실행 한 모듈의 유틸리티 이 작동합니다.

다른 프로젝트에서는 소스 모듈을 작성하여 유틸리티 모듈의 함수를 제공합니다. 등을 참조하거나 시도하기 위해 org를 사용하는 것에 대해 걱정하지 마십시오. 단순하게 유지하십시오. org 링크를 사용하여 도구 상자 모듈을 나타내는 org 파일에 을 다시 참조하여 설명서 참조를 얻을 수 있습니다.

한편, 파이썬 랩 책 시스템 과 같은 것을하고 싶다면 org 파일에서 파이썬 코드를 실행하고 결과를 얻으십시오. 다른 블록의 입력으로 사용하거나, 그런 다음 몇 가지 고급 noweb 기능을 사용하여 더 복잡한 블록 참조를 처리하고 인수 등을 전달해야합니다. 또한 라이브러리가 유용 할 수 있습니다.

14.6 도서관 바벨 =====================의는

The "Library of Babel" is a collection of code blocks. Like a function 
library, these code blocks can be called from other Org files. This 
collection is in a repository file in Org mode format in the `doc' 
directory of Org mode installation. For remote code block evaluation 
syntax, *note Evaluating code blocks::. 

    For any user to add code to the library, first save the code in 
regular `src' code blocks of an Org file, and then load the Org file 
with `org-babel-lob-ingest', which is bound to `C-c C-v i'. 
0

이것은 소스 코드가 파일에 "엉키기"하고 noweb 구문을 사용하여 개별적인 부분을 더 크게 전체로 모으는 것이 가능해야합니다. 다음은 방법의 예시로서 의미 :

* Individual code blocks 

#+name: foo 
#+BEGIN_SRC elisp 
(princ "Hello") 
#+END_SRC 

and another one: 

#+name: bar 
#+BEGIN_SRC elisp 
(princ "Goodbye") 
#+END_SRC 

* Combine them together 

#+BEGIN_SRC elisp :tangle ./tangled/foo :noweb yes 
(message "Package stuff") 
<<foo>> 
<<bar>> 
#+END_SRC 

가 복잡하게 얽힌 C-c C-v C-t를 사용하면 당신이 그 내용이다 (이미 존재하는)에 ./tangled 서브 디렉토리에 foo라는 이름의 파일을 가져옵니다 :

(message "Package stuff") 
(princ "Hello") 
(princ "Goodbye") 

이 pythonization은 간단해야하지만 설명하는 것의 고급 측면 (예 : 함수를 선택하는 태그 사용)은 확실히 이것으로 해결되지 않습니다. 머리).