Mayavi: ํŒŒ์ด์ฌ 3 ์ง€์›

์— ๋งŒ๋“  2013๋…„ 10์›” 04์ผ  ยท  72์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: enthought/mayavi

Mayavi์šฉ Python 3์„ ์ง€์›ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Python์€ ๊ณง Python 3.4๋ฅผ ์ถœ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ €๋Š” Python 3์ด ์ด์ œ ๋งค์šฐ ์„ฑ์ˆ™ํ–ˆ์œผ๋ฉฐ ์ฃผ์š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(numpy, scipy, pandas, matplotlib ๋“ฑ)๊ฐ€ ์ด๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ Python 3์œผ๋กœ ์ฒœ์ฒœํžˆ ์˜ฎ๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "์ž‘์€" ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ 2to3 ์•ฑ์œผ๋กœ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€๋Š” ์˜ค๋ž˜๋œ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ์œ ๋‹ˆ์ฝ”๋“œ/๋ฌธ์ž์—ด ์ŠคํŠธ๋ฆผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜์œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค...

Mayavi ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ค‘๊ธฐ์ ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Mayavi๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

"Python 4๊ฐ€ ์ถœ์‹œ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋งˆ์„ธ์š”..."

:-)

๊ฑด๋ฐฐ

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋˜ํ•œ Mayavi๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— Python์—์„œ env ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. http://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python

๋น™๊ณ ! ๊ทธ๊ฒŒ ํŠธ๋ฆญ์„ ํ–ˆ๋‹ค. Thx @jenshnielsen =:-)

๋‚ด ๋ฃจํŠธ Anaconda ํ™˜๊ฒฝ์—์„œ ์—ฌ์ „ํžˆ pyqt5 ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ QT_API ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์‹œ์Šคํ…œ ์ „์ฒด OS ์„ค์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ด ์Šคํฌ๋ฆฝํŠธ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๋‚˜ ๊ฐ™์€ ๊ฐ€๋‚œํ•œ shmuck์— ๋Œ€ํ•ด ์š”์•ฝํ•˜์ž๋ฉด, Mayavi๋ฅผ aaconda python 3.5์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์ฃผ์„์˜ ์œ ์šฉํ•œ ์กฐ์–ธ์—์„œ ์ถ”์ถœํ•œ ์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. anaconda ๋ฃจํŠธ ํ™˜๊ฒฝ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ pyqt4๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋œ ์ƒˆ ํ™˜๊ฒฝ(oldqt)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    conda create -n oldqt python=3 pyqt=4

  2. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    activate oldqt Windows OS์šฉ
    source activate oldqt Mac/Linux OS์šฉ

  3. menpo ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ mayavi๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    conda install -c menpo mayavi

  4. oldqt ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ python mayavi ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ์•„๋ž˜ ์Šค๋‹ˆํŽซ์„ ํฌํ•จํ•˜์—ฌ Mayavi์šฉ ์œ ํšจํ•œ QT API๊ฐ€ ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

import os
os.environ["QT_API"] = "pyqt"

๋ชจ๋“  72 ๋Œ“๊ธ€

@hadim Python 3์˜ Mayavi ๊ณ„ํš์€ Python 3์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” VTK์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ๋กœ๋“œ๋งต์€ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. http://www.vtk.org/Wiki/VTK/Python_Wrapping_FAQ๋ฅผ ์ฐธ์กฐ

:+1:

:+1:

:+1:

๋‚ด ์ƒ๊ฐ์— :thumbsup: ์ข‹์€ ์ผ์„ ๋งŽ์ด ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค Kitware๊ฐ€ VTK์—์„œ python3์„ ์ง€์›ํ•˜๋„๋ก ์„ค๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” Mayavi์˜ python3 ๋ฒ„์ „์— ๋Œ€ํ•œ ๊ธฐํšŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— :thumbsup: ์ข‹์€ ์ผ์„ ๋งŽ์ด ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์˜คํžˆ๋ ค ๋…ธ๋ ฅํ•ด์•ผ
Kitware๊ฐ€ VTK์—์„œ python3์„ ์ง€์›ํ•˜๋„๋ก ์„ค๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” ์—†๋‹ค.
Mayavi์˜ python3 ๋ฒ„์ „์— ๋Œ€ํ•œ ๊ธฐํšŒ.

๊ฐ•์กฐํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

VTK์—์„œ Python 3์œผ๋กœ ์ด์‹ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์—ฌ +1์ด๋ผ๊ณ  ๋งํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ก์„ ์œ„ํ•ด VTK ๋ฒ„๊ทธ ์ถ”์ ๊ธฐ์—์„œ ํ‹ฐ์ผ“์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. http://www.vtk.org/Bug/view.php?id=15554

์ข‹์€ ์†Œ์‹! David Gobbi(VTK Python ๋ฐ”์ธ๋”ฉ ๊ด€๋ฆฌ์ž)๋Š” ํ•ด๋‹น ๋ฒ„๊ทธ ํ‹ฐ์ผ“์— ๋Œ€ํ•ด ์‘๋‹ตํ–ˆ์œผ๋ฉฐ Py3 ์ง€์›์„ ์œ„ํ•œ ๋ฐ”์ธ๋”ฉ์„ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ๋ณ‘ํ•ฉ ์š”์ฒญ์„ ์ ‘์ˆ˜ํ–ˆ์œผ๋ฉฐ ์ด๋ฒˆ ์ฃผ๋ง๋ถ€ํ„ฐ Py3 ์ง€์›์— ๋Œ€ํ•ด ๊ตฌ์ฒด์ ์œผ๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.
http://www.vtk.org/Bug/view.php?id=15554#c34787

์ด๊ฒƒ์ด ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์ž‘์ผ ๋ฟ์ด๊ณ  Python 3 ์ง€์›์ด VTK ๋ฆด๋ฆฌ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€๋งŒ Mayavi๊ฐ€ Python 3์„ ์œ„ํ•ด ์Šค์Šค๋กœ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ์ ๊ทน์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. Python 3์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Mayavi ์ฝ”๋“œ๋ฒ ์ด์Šค ์ž์ฒด์— ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์‹œ์ž‘ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@jabooth๋‹˜ , ๊ฐ์‚ฌ

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ Python 3์œผ๋กœ ์ด๋™ํ•˜๋Š” Mayavi์˜ ์ „์ฒด ๊ทธ๋ฆผ์€ Python 3์„ ์ง€์›ํ•˜๋Š” ์ฃผ์š” ์ข…์†์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [ ] ํŒŒ์ด์ฌ vtk
  • [x] ํŠน์„ฑ
  • [x] ํŠน์„ฑ ์ˆ˜
  • [x] ํŒŒ์ดํŽ˜์ด์Šค
  • [ ] ์ƒ์ƒํ•˜๋‹ค

Python 3 VTK ๋ฐ”์ธ๋”ฉ์ด ์ฃผ์š” ๋ถ€๋ถ„์ด๋ฉฐ ์ž‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ข‹์€ ์†Œ์‹์ด์ง€๋งŒ VTK์˜ ์•ˆ์ •์ ์ธ ๋ฆด๋ฆฌ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ธ๋”ฉ์ด ์—†์œผ๋ฉด Python 3 ์นœํ™”์ ์ธ Mayavi์—์„œ ์ž‘์—…ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ Mayavi ์ž์ฒด๋Š” python 3๋„ ์ง€์›ํ•ด์•ผ ํ•˜๋Š” traits, traitsui ๋ฐ pyface์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ด์ง€๋งŒ ์ง€์›์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.

_๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ _, ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€(๊ทธ๋ฆฌ๊ณ  @dmsurti ๋Š” ์ด๋ฏธ ์‹œ์ž‘๋จ) ๋ณด๋ฅ˜ ์ค‘์ธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  Mayavi ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ Python 3์—์„œ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ Mayavi๋ฅผ Python 3์œผ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ๋” ์ ์€.

" ๋ฏธ๋ž˜ ๊ฐ€์ ธ์˜ค๊ธฐ์—์„œ"๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
print_function, division", ์ƒ๋Œ€ ๊ฐ€์ ธ์˜ค๊ธฐ ์ œ๊ฑฐ ๋ฐ ์ „ํ™˜
6๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒƒ.

์ง€๊ธˆ ๋‹น์žฅ ํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„๋‚ญ๋น„๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Mayavi๋Š” ํ•˜๋ฃจ ๋งŒ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ผ์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ํฐ ๋ฌธ์ œ๋Š” VTK๊ฐ€ Python 3์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ํ•„์š”ํ•œ ๋ณ€๊ฒฝ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. VTK๊ฐ€ ์—†์œผ๋ฉด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. David Gobbi์˜ ์ตœ๊ทผ ์ž‘์—…์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์–ด VTK์— ๋ณ‘ํ•ฉ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

python-py3k ๋ถ„๊ธฐ๊ฐ€ ๋ฐฉ๊ธˆ ๋ณ‘ํ•ฉ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค: https://gitlab.kitware.com/vtk/vtk/merge_requests/478

tvtk ํ˜„ํ™ฉ ์•„์‹œ๋Š” ๋ถ„ ๊ณ„์‹ ๊ฐ€์š”? ์˜ฌํ•ด ๋งˆ์นจ๋‚ด py3k๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

$ python
Python 3.4.3 (default, Mar 25 2015, 17:13:50) 
[GCC 4.9.2 20150304 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import vtk
>>>

์ด์•ผ!

์ด์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? Python 3 ์ง€์›์€ ๋‹ค์Œ ๋งˆ์ด๋„ˆ ๋ฆด๋ฆฌ์Šค vtk 6.3.1์— ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#250 ์ฐธ์กฐ

pull request #250์ด ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ์‡„.

๋ช‡ ๊ฐ€์ง€ ๋น ๋ฅธ ๊ธ์ •์  ์ธ ํ”ผ๋“œ๋ฐฑ
Mayavi 4.4.4์™€ ํ•จ๊ป˜ WinPython-64bit-3.4.4.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

1.) VTK-7.0.0-cp34-cp34m-win_amd64.whl (http://www.lfd.uci.edu/~gohlke/pythonlibs/#vtk)
2.) pip ์„ค์น˜ ๋งˆ์•ผ๋น„

@IVIUPPET ,
์—ฌ๊ธฐ์— ์–ธ๊ธ‰๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๊นŒ
https://github.com/enthought/mayavi/pull/250#issuecomment -207719214
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ?

@solarjoe

์‹œ๋„ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋งค์šฐ ์ œํ•œ๋œ Python ๋ฐฐ๊ฒฝ์—์„œ ๋‚˜์˜จ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ๊ฒŒ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ๋กœ ๋Œ์•„์™”์ง€๋งŒ Matlab ๋ฐ C#์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Python 3.5์—์„œ ๊ท€ํ•˜์˜ ๋งํฌ(Python 3.4์šฉ)๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•œ ์ง€์›๋˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ฆ‰์‹œ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํŒ”๋กœ์šฐํ•  ์„ค์ •์„ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

Python 3.5์šฉ Anaconda๋ฅผ ์„ค์น˜/์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ 3.19.1. ๋‚˜๋Š” ํ• 8.1.1์„ ์‚ฌ์šฉํ–ˆ๋‹ค. (์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ). ๊ฐ€๋Šฅํ•˜๋ฉด 64๋น„ํŠธ.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.
1) VTK-7.0.0-cp35-cp35m-win_amd64.whl
๋ฐœ์‹ : http://www.lfd.uci.edu/~gohlke/pythonlibs/#vtk
python 3.5 VTK์˜ 64๋น„ํŠธ ๋ฒ„์ „, Mayavi์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ์ข…์†์„ฑ(solarjoe์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!)

cd to downloadDir:
ํ• ์„ค์น˜ VTK-7.0.0-cp35-cp35m-win_amd64.whl

vcvarsall.bat์˜ ๋ถ€์žฌ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” VTK๊ฐ€ python 3.5์™€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์€ ํ›„ ๋ฐœ์ƒํ•œ ๋‹ค์Œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ Visual Studio๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Python 3.5์šฉ C++ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋œ Visual Studio Community 2015๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ณผ์ž‰์ด๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋Š” ๋ฐ ๋ช‡ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €์—๊ฒŒ๋Š” ์ด๊ฒƒ์ด ์ €ํ•ญ์ด ๊ฐ€์žฅ ์ ์€ ๊ฒฝ๋กœ์˜€์Šต๋‹ˆ๋‹ค(์ €๋Š” EE์ž…๋‹ˆ๋‹ค). ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ "์‚ฌ์šฉ์ž ์ง€์ •"์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ "ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด"์—์„œ Python ๋˜๋Š” C++์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

2) pip ์„ค์น˜ ๋งˆ์•ผ๋น„

๊ทธ๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์˜ ํ•˜๋ฃจ ํ›„์— ๋งˆ์นจ๋‚ด Matlab๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ณผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” 3D ๊ทธ๋ž˜ํ”„๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค! ๋‚ด Matlab์—์„œ Python์œผ๋กœ์˜ ์ „ํ™˜์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค :D

์œ„์˜ @IVIUPPET ๋Œ“๊ธ€์„ ์ฝ์œผ "vcvarsall.bat๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"์ด๋ผ๋Š” ๊ณ ํ†ต์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ• ์ด๋ผ๋Š” Microsoft์˜ ์ตœ๊ทผ(4์›” 11์ผ) ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ

IVIUPPET์˜ ์œ ์šฉํ•œ ์ง€์นจ์— ๋”ฐ๋ผ Anaconda python 3.5์— Mayavi๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์žฅ์• ๋ฌผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

Mayavi๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋‹ค์Œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
RuntimeError: Invalid Qt API 'pyqt5', valid values are: 'pyqt' or 'pyside'

Mayavi๋Š” pyqt5(์•„๋‚˜์ฝ˜๋‹ค ๊ธฐ๋ณธ๊ฐ’)์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด pyqt4๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฉฐ pyqt4๋ฅผ Qt API๋กœ ์ง€์ •ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@dreme ๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ์•„์ง ์–ด๋–ค ์ข…๋ฅ˜์˜ GUI๋„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ๋‚ด ํ”„๋กœ๊ทธ๋žจ์— QT API๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๋ฌธ์„œ๋ฅผ ํ›‘์–ด๋ณธ ๊ฒฐ๊ณผ QT5๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด ์•„์ง ํ•ด์•ผ ํ•  ์ผ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Mayavi์™€ ์•ฝ๊ฐ„์˜ ๋น„ํ˜ธํ™˜์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋†€๋ผ์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ๊ท€ํ•˜์˜ ์˜ค๋ฅ˜๋Š” ๋‚˜์—๊ฒŒ ์ด๋ฅผ ์ œ์•ˆํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Mayavi๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ œ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ QT์™€ ๊ด€๋ จ๋œ ๋„์›€์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ๋‚˜๊ฐ€๋ฉด ์‹คํ—˜์‹ค์— ์ฝ”๋“œ๋ฅผ ๋‚จ๊ฒจ๋‘˜ ๋•Œ GUI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Mayavi ๋ฐ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜๊ณผ์˜ ๋น„ํ˜ธํ™˜์„ฑ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด ๊ณ„์† ์•Œ๋ ค์ฃผ์„ธ์š”!

์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € Qt4๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Anaconda์˜ Qt5์™€ ์†Œํ”„ํŠธ์›จ์–ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋˜ํ•œ VTK๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— Qt4 ๋˜๋Š” Qt5 ์œ„์ ฏ์„ ์›ํ•˜๋Š”์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์Œ, http://www.vtk.org/Wiki/VTK/Building/Windows์˜ ์ง€์นจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค(http://www.vtk.org/download/)์—์„œ VTK ์ปดํŒŒ์ผ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค .

๊ทธ๋Ÿฌ๋‚˜ Qt5 ์œ„์ ฏ์„ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์„ ๋ณผ ์ˆ˜ ์—†์—ˆ๊ณ  ์–ด์จŒ๋“  ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค(Microsoft Visual Studio Community 2015 ์‚ฌ์šฉ)๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

115>  Generating Code...
115>LINK : fatal error LNK1104: cannot open file '..\..\lib\Debug\vtkViewsCore-7.1.lib'
117>------ Build started: Project: ALL_BUILD, Configuration: Debug Win32 ------
117>  Building Custom Rule C:/MyProjects/VTK-src/CMakeLists.txt
117>  CMake does not need to re-run because C:\MyProjects\CMakeFiles\generate.stamp is up-to-date.
========== Build: 18 succeeded, 99 failed, 0 up-to-date, 0 skipped ==========

VTK_Group_Qt๋ฅผ ์ผœ๊ณ  VTK_QT_VERSION์„ 5(๊ธฐ๋ณธ๊ฐ’์€ 4)๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ VTK/ParaView์™€ ํ•จ๊ป˜ Qt 5๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Tomviz๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ํŒจํ‚ค์ง•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฝค ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ Windows์—์„œ Visual Studio 2015๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ช‡ ๊ฐœ์›”์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.

@cryo๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ €๋Š” C++ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๊ฑฐ์˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ํ›„์† ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

"VTK_Group_Qt๋ฅผ ์ผ  ๋‹ค์Œ VTK_QT_VERSION์„ 5๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค"๋ผ๊ณ  ๋งํ•˜๋ฉด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? VTK_Group_Qt ๋ฐ VTK_QT_VERSION ์šฉ์–ด๊ฐ€ ๋งŽ์€ CMakeLists.txt ํŒŒ์ผ๊ณผ vtkiOS.cmake, vtkAndroid.cmake, VTKConfig.cmake.in ๋ฐ vtkQt.cmake ํŒŒ์ผ์— ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ cmake-gui๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. VTK_Group_Qt๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ƒ์ž์— ์ฒดํฌ ํ‘œ์‹œ๋ฅผ ํ•˜๊ณ  ๊ตฌ์„ฑ์„ ํด๋ฆญํ•˜๋ฉด VTK_QT_VERSION์ด ์ƒˆ ๋ณ€์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ CMake ๋ช…๋ น์ค„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cmake -DVTK_Group_Qt:BOOL=ON -DVTK_QT_VERSION:STRING=5 C:/path/to/vtk/src

์ด๋“ค์€ ๋ชจ๋‘ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ์˜ CMakeCache.txt์— ์ €์žฅ๋˜์ง€๋งŒ cmake-gui, cmake ๋ช…๋ น์ค„ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ Python ๋ž˜ํ•‘์„ ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋” ๋ช…ํ™•ํ•ด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@dreme Qt5 ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก VTK๋ฅผ ์ปดํŒŒ์ผํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Mayavi/ETS๋Š” Qt4(๋˜๋Š” WX)๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค: https://github.com/enthought/mayavi/issues/450 . ์ œ๊ฐ€ ๋น ์ง„๊ฒŒ ์žˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค...

@cryos ๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. cmake๊ฐ€ ์„ค์น˜๋  ๋•Œ cmake -gui ํ”„๋กœ๊ทธ๋žจ๋„ ์ œ๊ณต๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

์ž, cmake-gui๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์†Œ์Šค(C:/MyProjects/VTK-src) ๋ฐ ๋นŒ๋“œ(C:/MyProjects/VTK-bin) ํด๋”๋ฅผ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Configure ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋งŽ์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค(์ฒจ๋ถ€ ์ฐธ์กฐ).

๋˜ํ•œ ๋‚˜์—ด๋œ ๋ณ€์ˆ˜ ์ค‘์—์„œ VTK_Group_Qt ์šฉ์–ด๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฒจ๋ถ€ ๊ทธ๋ฆผ ์ฐธ์กฐ).

cmakegui

Add Entry ๋ฒ„ํŠผ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

C ๋˜๋Š” C++ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์— ์‹ค์ œ๋กœ ์‹คํŒจํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊ธฐ์— ์—†์Šต๋‹ˆ๋‹ค. Visual Studio 2015๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ ์Šคํฌ๋ฆฐ์ƒท์˜ ์ƒ์„ฑ๊ธฐ๋Š” Visual Studio 2017(์ •๋ง ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋ฉฐ ์ง€๊ธˆ์€ ํ”ผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)์ด๋ผ๊ณ  ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ํŠธ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜์ง€๋งŒ Visual Studio 2015๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@jonathanrocher ์•ˆ๋…•ํ•˜์„ธ์š”. ์ œ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” @IVIUPPET ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์•„๋‚˜์ฝ˜๋‹ค ํŒŒ์ด์ฌ 3.5์—์„œ mayavi๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ์˜ ์ง€์‹œ์— ๋”ฐ๋ผ Mayavi OK๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๊ฐ€์ ธ ์˜ค๋ ค๊ณ ํ•˜๋ฉด ๋‹ค์Œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
RuntimeError: Invalid Qt API 'pyqt5', valid values are: 'pyqt' or 'pyside'

๊ทธ๋ž˜์„œ VTK๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ Anaconda์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋ณธ Qt ๋ฒ„์ „์ธ Qt5๋ฅผ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์•ž์˜ ๋Œ“๊ธ€์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋‚˜๋Š”์ด ์ž‘์—…์—์„œ ํ—ˆ๋‘ฅ์ง€๋‘ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...

Mayavi๊ฐ€ ๋Œ€์‹  WX๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@dreme - pysph ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ conda๋กœ ๋‹ค์Œ ์ง€์นจ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค( ์—ฌ๊ธฐ ์ฐธ์กฐ).

$ conda install -c conda-forge matplotlib jupyter pyside
$ conda install -c menpo mayavi

๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š” @prabhuramachandran , ๊ทธ ์กฐ์–ธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ž…๋ ฅํ–ˆ์„ ๋•Œ: conda install -c conda-forge matplotlib jupyter pyside

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Fetching package metadata ...........
Solving package specifications: ....

UnsatisfiableError: The following specifications were found to be in conflict:
  - matplotlib
  - python 3.5*
Use "conda info <package>" to see the dependencies for each package.

python 3.5๋ฅผ ์ข‹์•„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์•„์„œ python 3.4์šฉ ์ƒˆ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘ conda install ๋ช…๋ น์ด ๋ชจ๋‘ ์‹ค์ œ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ conda install -c conda-forge matplotlib jupyter pyside
$ conda install -c menpo mayavi

๊ทธ๋Ÿฌ๋‚˜ jupyter notebok์—์„œ mayavi๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•  ๋•Œ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์ด์ „ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
RuntimeError: Invalid Qt API 'pyqt5', valid values are: 'pyqt' or 'pyside'

@dreme ๋‹˜ , menpo ์ฑ„๋„์—์„œ mayavi ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์„ค์น˜ ํ›„ pyqt ์—์„œ ๊ฐ•์ œ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

> conda install -c menpo mayavi
> conda install pyqt=4.11.4

๋‚˜๋Š” ์ตœ์ข… ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์ ์–ด๋„ ํ‘œ์ค€ ์•„๋‚˜์ฝ˜๋‹ค ์ฑ„๋„๊ณผ ์šฐ๋ฆฌ ์ฑ„๋„์—์„œ ๊ฐ€์ ธ์˜จ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ๊ณผ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, @scienceopen ์€ https://github.com/enthought/mayavi/issues/448#issuecomment -258065329์—์„œ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋” ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋‹ค)

์˜ˆ , QT4 ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ HiDPI ๋น„ Mayavi ์ž‘์—…์— QT5๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Python 3 ์ง€์›์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. QT5 ์ง€์›์— 3๋…„ ๋ฏธ๋งŒ์ด ์†Œ์š”๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด(https://github.com/enthought/mayavi/issues/84#issuecomment-205720564) Windows์— ์žˆ๊ณ  Anaconda์— ๋ฐ”์ธ๋”ฉ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ Mayavi๊ฐ€ WinPython๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ์‰ฝ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง€์†์ ์ธ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@jabooth์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์†”๋ฃจ์…˜(

C:\Users\dreme\Anaconda3\envs\py34\lib\site-packages\traitsui\qt4\__init__.py in <module>()
     16 # import pyface.qt before anything else is done so the sipapi
     17 # can be set correctly if needed
---> 18 import pyface.qt
     19 
     20 #----------------------------------------------------------------------------

C:\Users\dreme\Anaconda3\envs\py34\lib\site-packages\pyface\qt\__init__.py in <module>()
     42 elif qt_api != 'pyside':
     43     raise RuntimeError("Invalid Qt API %r, valid values are: 'pyqt' or 'pyside'"
---> 44                        % qt_api)

RuntimeError: Invalid Qt API 'pyqt5', valid values are: 'pyqt' or 'pyside'

[์ค‘์š”ํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ Jupyter ๋…ธํŠธ๋ถ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.]

์ €๋Š” Anaconda python ๋ฐฐํฌํŒ์„ ์ •๋ง ์ข‹์•„ํ•˜์ง€๋งŒ @solarjo๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ

์ด ๊ฒฝ์šฐ @solarjoe , ์–ด๋–ค ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์…จ์Šต๋‹ˆ๊นŒ? WinPython 3.5.2.3Qt5 ๋˜๋Š” WinPython 3.5.2.3 ?

@dreme ๋‚˜๋Š” ๋‹น์‹ ์ด ํ•œ ํ›„์— ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค

conda create -n oldqt python=3 pyqt=4

ํ•ด๋‹น ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒƒ(Windows์šฉ)

activate oldqt

๋˜๋Š” Mac/Linux์šฉ

source activate oldqt

QT_API ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์–ธ๊ฐ€๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ๋œ ๋กœ์ง์€ https://github.com/enthought/pyface/blob/master/pyface/qt/__init__.py ๋ฅผ ์ฐธ์กฐ

@dreme ๋‚˜๋Š” ๋‹น์‹ ์ด ํ•œ ํ›„์— ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค

conda create -n oldqt python=3 pyqt=4
ํ•ด๋‹น ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•œ ๊ฒƒ(Windows์šฉ)

oldqt ํ™œ์„ฑํ™”

๋„ค, ๊ทธ๊ฒŒ ์ œ๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค @scienceopen

QT_API ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์–ธ๊ฐ€๋กœ ์„ค์ •ํ•˜์…จ์Šต๋‹ˆ๊นŒ? ์‚ฌ์šฉ๋œ ๋กœ์ง์€ https://github.com/enthought/pyface/blob/master/pyface/qt/__init__.py ๋ฅผ ์ฐธ์กฐ

์•„๋‹ˆ์š”, ์ด๊ฒƒ์€ ๋ชจ๋‘ anaconda 3.5๋ฅผ ์ƒˆ๋กœ ์„ค์น˜ํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ QT_API ๋ณ€์ˆ˜์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Jupyter ๋…ธํŠธ๋ถ์— ์ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ mayavi์— ์ ํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•ญ์ƒ env ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Jupyter๊ฐ€ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๊ฐ’์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

echo %QT_API%

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝ

set QT_API= pyqt

Windows์—์„œ http://superuser.com/questions/79612/setting-and-getting-windows-environment-variables-from-the-command-prompt

@dreme , Qt4 ๋ฐ Mayavi 4.4.4์™€ ํ•จ๊ป˜ ์ด์ „ ๋ฒ„์ „์ธ WinPython-64bit-3.4.4.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

1.) VTK-7.0.0-cp34-cp34m-win_amd64.whl (http://www.lfd.uci.edu/~gohlke/pythonlibs/#vtk)
2.) pip ์„ค์น˜ ๋งˆ์•ผ๋น„

http://www.lfd.uci.edu/~gohlke/pythonlibs/ ์—์„œ Mayavi ์„ค์น˜๋ฅผ ์‹œ๋„ํ•˜๊ณ  Mayavi ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์„ ์„ ํƒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
WinPython์˜ Qt5 ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4 ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ญ์ƒ env ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Jupyter๊ฐ€ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๊ฐ’์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—์ฝ” %QT_API%
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝ

QT_API = pyqt ์„ค์ •

๊ธ€์Ž„, ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ํ• ๋ฟ์ž…๋‹ˆ๋‹ค. @jenshnielsen์ด ์กฐ์–ธํ•œ ๋Œ€๋กœ QT_API ์— ๋Œ€ํ•œ Windows ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ pyqt ๋กœ ์„ค์ •ํ•˜๊ณ  SET ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ fmd, Qt API๊ฐ€ pyqt5 ๋ผ๊ณ  ๋ถˆํ‰ํ•˜๋Š” ๋™์ผํ•œ ์ด์ „ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€

๊ทธ๋Ÿฐ ๋‹ค์Œ Anaconda Navigator๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ํ™•์ธํ–ˆ์„ ๋•Œ QT_API ๋ณ€์ˆ˜๊ฐ€ ์™„์ „ํžˆ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ Anaconda ๋‚ด๋น„๊ฒŒ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  "oldqt" ์ปค๋„์—์„œ Jupyter ๋…ธํŠธ๋ถ์„ ์—ด๋ฉด pyqt5์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ๋™์ผํ•œ ์ด์ „ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •ํ•˜๋ฉด ํ˜„์žฌ cmd ์…ธ์—์„œ๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์…ธ ์™ธ๋ถ€๋‚˜ ๋‹ค๋ฅธ ์…ธ์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Windows์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ Google์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด QT_API๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์‰˜์—์„œ ํŒŒ์ด์ฌ์„ ์—ด๊ณ  ๊ฐ„๋‹จํ•œ mlab ์˜ˆ์ œ๋ฅผ ์‹คํ–‰ ํ•˜์‹ญ์‹œ์˜ค .

๋˜ํ•œ Mayavi๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— Python์—์„œ env ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. http://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python

@dreme : ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋„์›€์ด ๋˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/menpo/menpo3d/issues/16

README์˜ ๊ฒฐ๊ณผ ์ง€์นจ์„ ๋”ฐ๋ฅด๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/menpo/menpo3d#visualizing -3d-objects

์ฃผ์š” ๋ถ€๋ถ„:

Windows๋ฅผ ์‹คํ–‰ ์ค‘์ด๊ณ  ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

```
QT_API=pyqt ์„ค์ •
ETS_TOOLKIT=qt4 ์„ค์ •
````

@jenshnielsen ์‚ฌ์šฉ์ž(์ ์–ด๋„ Menpo์˜)๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์ž๋™ํ™”ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/menpo/menpo3d/issues/22

๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•˜๊ณ  ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ Mayavi๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์ „์— Python์—์„œ env ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. http://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python

๋น™๊ณ ! ๊ทธ๊ฒŒ ํŠธ๋ฆญ์„ ํ–ˆ๋‹ค. Thx @jenshnielsen =:-)

๋‚ด ๋ฃจํŠธ Anaconda ํ™˜๊ฒฝ์—์„œ ์—ฌ์ „ํžˆ pyqt5 ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ QT_API ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ์‹œ์Šคํ…œ ์ „์ฒด OS ์„ค์ •์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ์ด ์Šคํฌ๋ฆฝํŠธ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ๋‚˜ ๊ฐ™์€ ๊ฐ€๋‚œํ•œ shmuck์— ๋Œ€ํ•ด ์š”์•ฝํ•˜์ž๋ฉด, Mayavi๋ฅผ aaconda python 3.5์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ์ฃผ์„์˜ ์œ ์šฉํ•œ ์กฐ์–ธ์—์„œ ์ถ”์ถœํ•œ ์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. anaconda ๋ฃจํŠธ ํ™˜๊ฒฝ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ pyqt4๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋œ ์ƒˆ ํ™˜๊ฒฝ(oldqt)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    conda create -n oldqt python=3 pyqt=4

  2. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    activate oldqt Windows OS์šฉ
    source activate oldqt Mac/Linux OS์šฉ

  3. menpo ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ mayavi๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    conda install -c menpo mayavi

  4. oldqt ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ python mayavi ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ์•„๋ž˜ ์Šค๋‹ˆํŽซ์„ ํฌํ•จํ•˜์—ฌ Mayavi์šฉ ์œ ํšจํ•œ QT API๊ฐ€ ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

import os
os.environ["QT_API"] = "pyqt"

VTK-7.0.0-cp34-cp34m-win_amd64.whl์€ http://www.lfd.uci.edu/~gohlke/pythonlibs/#vtk ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์ผ์ฃผ์ผ ์ „์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๋‚ด ์‚ฌ๋ฌด์‹ค ์ปดํ“จํ„ฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ๋ณด๋‚ด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์›”์š”์ผ(๋˜ํ•œ ์ผ์น˜ํ•˜๋Š” Mayavi ๋ฒ„์ „์˜ ๊ฒฝ์šฐ).

์ตœ์‹  Mayavi ๋ฐ VTK๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

VTK-7.0.0-cp34-cp34m-win_amd64.whl์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋ณด๋‚ด์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ๋งํฌ๋Š” ์•ฝ 30์ผ ๋™์•ˆ ์œ ํšจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

VTK-7.0.0-cp34-cp34m-win_amd64.whl

http://ge.tt/8QvtGkl2

๊ทธ๋ž˜์„œ ... ๋Œ€๋žต ์ด๊ฒƒ์€ ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๊ฒƒ์„ ์ฃผ์‹œํ•ด ์™”์œผ๋ฉฐ ์ด๊ฒƒ์€ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

@nevion ์€ ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? ์ด๊ฒƒ์€ ๋‹ซํžŒ ๋ฌธ์ œ์ด๋ฉฐ Linux๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Windows์˜ Python 3.6์—์„œ ์ž‘์—…ํ•˜๋Š” Mayavi๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@mabl ๋ฌธ์ œ์˜ ํ”์ ์—์„œ ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉฐ qt ์ง€์› ์ง€์—ฐ๊ณผ ๊ฐ™์€ ๊ณผํ•™ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์ข…์ข… ๋ถˆ๋ถ„๋ช…ํ•œ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๊ณผ 2.7๋งŒ ์ง€์›ํ•˜๋Š” ์•„๋‚˜์ฝ˜๋‹ค ๋ฐฐํฌํŒ ์‚ฌ์ด์—์„œ ๋‚˜๋Š” ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋‚˜์ฝ˜๋‹ค๊ฐ€ ์—ฌ์ „ํžˆ 2.7๋งŒ ์ง€์›ํ•˜๋Š” ์ด์œ ๋ฅผ ์•„์‹ญ๋‹ˆ๊นŒ?

conda install mayavi
Fetching package metadata .........
Solving package specifications: .

UnsatisfiableError: The following specifications were found to be in conflict:
  - mayavi -> apptools 4.2.0 -> python 2.7* -> openssl 1.0.1*
  - python 3.6*
Use "conda info <package>" to see the dependencies for each package.

Anaconda3๋ฅผ ์„ค์น˜ํ•˜๊ณ  Mayavi๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ–๋‹ค:

(C:\ProgramData\Anaconda3) C:\Users\nort.ARP>conda install mayavi
ํŒจํ‚ค์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ...........
ํŒจํ‚ค์ง€ ์‚ฌ์–‘ ํ•ด๊ฒฐ: .

UnsatisfiableError: ๋‹ค์Œ ์‚ฌ์–‘์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๋งˆ์•ผ๋น„ -> apptools 4.2.0 -> ํŒŒ์ด์ฌ 2.7*
  • ํŒŒ์ด์ฌ 3.6*
    "์ฝ˜๋‹ค ์ •๋ณด ์‚ฌ์šฉ"๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ฐ ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

@dreme ์—์„œ ์œ„์˜ 4๊ฐ€์ง€ ์ง€์นจ์„ ๋ณด๊ฑฐ๋‚˜ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๊นŒ?

ํŠนํžˆ @dreme์—์„œ

  1. anaconda ๋ฃจํŠธ ํ™˜๊ฒฝ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ pyqt4๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋œ ์ƒˆ ํ™˜๊ฒฝ(oldqt)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

        conda create -n oldqt python=3.5 pyqt=4
    
  2. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

        activate oldqt #for Windows OS
        source activate #oldqt for Mac/linux OS
    
  3. menpo ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ mayavi๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

        conda install -c menpo mayavi
    
  4. oldqt ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜์—ฌ python mayavi ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ์Šคํฌ๋ฆฝํŠธ์˜ ๋งจ ์œ„์— ์•„๋ž˜ ์Šค๋‹ˆํŽซ์„ ํฌํ•จํ•˜์—ฌ mayavi์— ๋Œ€ํ•œ ์œ ํšจํ•œ QT API๊ฐ€ ์ง€์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

        import os
        os.environ["QT_API"] = "pyqt"
    

@jonathanrocher ์•„๋‹ˆ์š”, ์ถฉ๋ถ„ํžˆ ๊ณต์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋˜์—ˆ๊ณ  ๋ฐฉ๊ธˆ ์ž‘๋™ํ–ˆ๋‹ค๋Š” ์ฃผ์žฅ์„ ์ž˜๋ชป ์ฝ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๋ ˆ์‹œํ”ผ์— ๋”ฐ๋ผ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ @dreme 4 ํฌ์ธํŠธ ์ง€์นจ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ python 3.6์—์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” 3.5๋ฅผ ๊ฐ•์ œํ•ด์•ผํ–ˆ๋‹ค.
conda create -n oldqt python=3.5 pyqt=4 ๊ทธ๋ฆฌ๊ณ  ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋„ค ๋งž์Šต๋‹ˆ๋‹ค. Mayavi 4.5์—๋Š” QT4๋กœ ์ธํ•ด Python 3.5๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก mayavi ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ Qt5์™€ ํŒŒ์ด์ฌ 3.6 + VTK7.1 ์ž‘์—… conda install python=3.6.1 vtk>=7 -c clinicalgraphics ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๊ทผ์˜์€์—์„œ ์ˆ˜ ์ปค๋ฐ‹ pyface , traits , ๋ฐ traitsui . ์ด๊ฒƒ์€ ์šฐ๋ฆฌ CI์— ๋”ฐ๋ผ OSX, Windows ๋ฐ Linux์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ HiDPI๋ฅผ ์ง€์›ํ•˜๋Š” OSX ์‹œ์Šคํ…œ์—์„œ๋Š” ํ™”๋ฉด ์˜์—ญ์˜ 1/4๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

screen shot 2017-10-17 at 17 07 08

์ด๊ฒƒ์€ Mayavi ์ˆ˜์ค€์—์„œ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

VTK7.1์˜ ์ผ๋ถ€์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

https://public.kitware.com/pipermail/vtk-developers/2016-November/034456.html

๊ทธ๋Ÿฌ๋‚˜ ๋” ๊นŠ์ด ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์˜ต์…˜(์Šฌํ”„์ง€๋งŒ ์ฐฝ์„ ์ฑ„์šธ ์ˆ˜ ์žˆ์Œ)์€ VTK8์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋‹ค์Œ HiDPI๋ฅผ ๋„๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” QVTKOpenGLWidget์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://www.vtk.org/doc/nightly/html/classQVTKOpenGLWidget.html#details

๋˜๋Š” ์ด ์œ„์ ฏ์„ ์‚ฌ์šฉํ•  ๋•Œ HiDPI๊ฐ€ "๊ทธ๋ƒฅ ์ž‘๋™"ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋‚˜์—ด๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @larsoner๋‹˜ , ์ด์ œ vtk 8.1์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

vtk 8.1.0 conda install -c conda-forge vtk ํ•˜๋ฉด python์ด 3.6.2๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  matplotlib๋Š” 2.1.0์œผ๋กœ).
๋‚˜๋Š” pyface 5.1.0, traits 4.6.0, traitsui 5.1.0, conda install -c conda-forge pyface traits traitsui
qt 5.6.2๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

conda-forge conda install -c conda-forge mayavi ์—์„œ mayavi 4.5.0์„ ์„ค์น˜ํ•˜๋ฉด pyqt 4.* , python 3.6* ๋ฐ vtk 7.1.* ์ข…์†์„ฑ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํŒจํ‚ค์ง€์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ฑฐ๋‚˜ Python3.6, Qt5 ๋ฐ VTK7.1์—์„œ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ฒŒ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ (์ •์ง€ Python3.5 + QT4์— ๋Œ€ํ•œ @dreme์— ์˜ํ•œ ํ•ด๊ฒฐ์ฑ…์ด์žˆ๋‹ค).

์šฐ๋ฆฌ๋Š” Linux, OSX ๋ฐ Windows์—์„œ ์•ฝ 6๊ฐœ์›” ๋™์•ˆ CI์šฉ์œผ๋กœ ์ด ํ™˜๊ฒฝ ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด ์™”์Šต๋‹ˆ๋‹ค(HiDPI ์ œ์™ธ):

https://github.com/mne-tools/mne-python/blob/master/environment.yml

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋งŽ์€ ๊ฒƒ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Mayavi์˜ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” 3.6 ๋ฒ„์ „์ด ์žˆ๊ณ  pyface , traits ๋ฐ traitsui ์ผ๋ถ€ ์ปค๋ฐ‹์— ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— clinicalgraphics ์—์„œ VTK7์„ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค traitsui ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  GitHub์—์„œ

VTK8์„ conda-forge์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•„์ง ์‹œ๋„ํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€ ํ•œ ๋ฒˆ ์‹œ๋„ํ•ด ๋ณด๊ณ  HiDPI ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋‚˜๋ฅผ ๋•Œ๋ฆฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”!

@larsoner , @mpanighel -- ์ด๊ฒƒ์€ VTK 7.x์˜ ๋ฌธ์ œ์ด๋ฉฐ(์ฐฝ ํฌ๊ธฐ๊ฐ€ 4๋ถ„์˜ 1์— ๋ถˆ๊ณผํ•จ) VTK 8.x์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฉฐ์น  ์•ˆ์— VTK๋ฅผ ๋” ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ„์† ์ง€์ผœ๋ด ์ฃผ์‹ญ์‹œ์˜ค.

์ฐธ๊ณ ๋กœ, ์ €๋Š” PyPI์—์„œ VTK 8.1.0์— ๋Œ€ํ•œ ํœ ์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. http://prabhuramachandran.blogspot.in/2018/01/vtk-810-wheels-for-all-platforms-on-pypi.html

๋ฉ‹์ง€๋‹ค @prabhuramachandran !

๋ฉ‹์ง€๋„ค์š” @prabhuramachandran ! ๊ฐ์‚ฌ ํ•ด์š”!

์š”์ฆ˜ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ตœ์‹  ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋”ฐ๋ฅด๊ณ  Linux์˜ python3.6/pyqt5์—์„œ ์„ค์ •์„ ์žฌํ˜„ํ•˜๊ณ  mayavi๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/enthought/mayavi/issues/595 ์— ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

scottstanie picture scottstanie  ยท  4์ฝ”๋ฉ˜ํŠธ

rambalachandran picture rambalachandran  ยท  9์ฝ”๋ฉ˜ํŠธ

relyativist picture relyativist  ยท  16์ฝ”๋ฉ˜ํŠธ

anntzer picture anntzer  ยท  7์ฝ”๋ฉ˜ํŠธ

rahulporuri picture rahulporuri  ยท  3์ฝ”๋ฉ˜ํŠธ