Emacs에서 파이썬 소스코드 브라우징 하기...

서지원의 이미지

Emacs로 파이썬 코드들을 보고 있는데, 소스코드가 상당히 방대해서 cscope과 같은 utility를 쓰고 싶습니다.

근데 default로 emacs에서 쓸 수 있는 cscope은 python인 경우에는 안되는 것 같더군요.

Ctags를 사용해서 tag를 만들어서 써 보기도 했는데, 아무래도 cscope보다는 좀 부족한 것 같구요 (예를 들면 cscope에서 who called this function이나 find symbol 에 해당하는 기능이 없는 것 같더군요)

1. cscope을 python이랑 같이 쓸 수 있는 방법이나

2. 파이썬 소스코드 브라우징을 편리하게 할 수 있는 emacs에서 쓸 수 있는 툴이 있으면 알려주시면 좋겠습니다.

서지원의 이미지

답변이 없어서 제가 이것 저것 시도해 봤는데요, Python source code 를 browsing하는데 가장 좋은 솔루션은 (위에 있을수록 더 좋음)

1. slickedit(상용) -> reference를 찾는데 좀 버그가 있어서 회사에다 문의했더니 2008 버전에서 고치겠다는군요. Python source code를 가장 정확하게 tagging해 줍니다. 어떤 function에 대해서 caller를 찾는 경우 실제 function call을 찾아 주며, function call이 아닌 다른 곳의 같은 symbol은 안나오도록 해 줍니다. (그것들을 다 포함하고 싶으면 reference로 찾으면 되는듯) 특징으로는, 마우스로 함수명에 클릭을 하면 아래쪽 preview창에서 그 함수의 정의나 caller들을 미리 작게 보여줍니다.

2. source insight(상용, windows only) -> 홈페이지에 있는 python.clf파일을 적용하면 정의/reference들을 어느정도 잘 찾아주지만, reference들에 대해서 false positive들이 좀 있습니다. Tim Peters가 source insight를 쓰고 있고, python customize를 해서 쓴다길래 python support file을 좀 달라고 해 봤는데, 그래서 받은게 홈페이지에 있는 python.clf랑 같습니다. -0-; False Positive가 있지만, 장점이라면 가볍고(<4mb) syntax highlighting뿐만 아니라 함수명 등은 크게 보여주고, 괄호 짝이 여러 개 있는 경우 ((())) 바깥쪽의 괄호를 좀더 크게 보여주고 해서 소스코드를 보기에 아주 편합니다. (하지만 역시 단점은 tagging이 정확하지 않으며 회사에 문의해봐도 별로 python support를 추가할 의지가 없었습니다) Slickedit와 비슷하게 preview 창이 있습니다.

3. ptags.py/eptags.py -> python source code repository 에 Tools/scripts에 ptags.py/eptags.py 라는 python script가 있는데 그것들을 사용해서 tag를 만들어내면 vim/emacs에서 좀 정확하게 ctags/etags를 쓸 수 있습니다. cscope에 대해서 비슷하게 pycscope이 있는데, 관리가 안되고 있어서 쓰기에 좀 무리가 있습니다. 어쨋건 소스코드가 바뀔 때 위 두가지 툴처럼 tagging을 자동으로 해 주거나 하지 않으며 함수 정의로 가는 것만 되고 reference를 보는 것은 안되는 것으로 알고 있습니다. (cscope은 되지만 python에 대해서 tagging이 정확하지 않고, 위의 두 툴처럼 preview가 되지 않습니다)

제가 해 본 수십가지 조합 중에서 위 세 가지가 쓸 만한 조합이었으며, 1과 2는 차이가 아주 크지는 않지만 2와 3은 효율성 면에서 차이가 매우 컸습니다. python으로 된 방대한 프로그램을 이해해야 하는 경우가 있다면, slickedit를 사용하는 것을 추천합니다. (2008버전 이후로...) 오픈소스 중에서는 1이나 2에 비교할 만한 것을 찾지 못해서 아쉽네요.

권순선의 이미지

질문보다 답변이 더 좋네요. ^^ +1점 날립니다...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.