Ipython: ImportError: ์ด๋ฆ„์ด shutil_get_terminal_size์ธ ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 07์›” 28์ผ  ยท  81์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ipython/ipython

@carreau ์—์„œ ์—…๋ฐ์ดํŠธ:
๋‹ค์‹œ ์—ด๋ฉด 5.4๋ฅผ ํƒœ๊ทธ๋กœ ์ง€์ •ํ•˜์—ฌ shutil_get_terminal_size๋ฅผ ๊ณต๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


ipython sudo apt-get install ipython-notebook , ipython ์„ค์น˜ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

jiangyuping@Lenovo :~$ ipython
์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/usr/local/bin/ipython", 4ํ–‰,
IPython์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ start_ipython
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/IPython/init .py ", 48ํ–‰,
.core.application import ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/IPython/core/application.py", 25ํ–‰,
IPython.core ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฆด๋ฆฌ์Šค์—์„œ, crashhandler
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/IPython/core/crashhandler.py", 28ํ–‰,
IPython.core์—์„œ ultratb ๊ฐ€์ ธ์˜ค๊ธฐ
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/IPython/core/ultratb.py", 128ํ–‰,
IPython.utils.terminal์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ get_terminal_size
ํŒŒ์ผ "/usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py", 22ํ–‰,
backports.shutil_get_terminal_size์—์„œ get_terminal_size๋ฅผ _get_terminal_size๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
ImportError: ์ด๋ฆ„์ด shutil_get_terminal_size์ธ ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

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

@oschow ์ด๊ฒƒ์€ _should_ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

# start by making sure pip, setuptools are up to date:
pip install --upgrade setuptools pip
# uninstall if pip thinks you already have it but don't seem to:
pip uninstall backports.shutil_get_terminal_size
# install it again with out definitely-up-to-date pip:
pip install --upgrade backports.shutil_get_terminal_size

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

apt ์™ธ๋ถ€์— ์„ค์น˜๋œ IPython์˜ ์ตœ์‹  ๋ณต์‚ฌ๋ณธ์ด ์žˆ์œผ๋ฉฐ backports.shutil_get_terminal_size ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. pip ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

@takluyver pip install ipython ์ดํ›„์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

jiangyuping@Lenovo :~/ipython$ pip install ipython
์š”๊ตฌ ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ถฉ์กฑ๋จ(--upgrade๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—…๊ทธ๋ ˆ์ด๋“œ): /usr/local/lib/python2.7/dist-packages์˜ ipython

๊ทธ๋Ÿฌ๋ฉด ipython ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

jiangyuping@Lenovo :~/ipython$ ipython
์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/usr/local/bin/ipython", 4ํ–‰,
IPython์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ start_ipython
ํŒŒ์ผ "/home/jiangyuping/ipython/IPython/ init .py", 48ํ–‰,
.core.application import ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ
ํŒŒ์ผ "/home/jiangyuping/ipython/IPython/core/application.py", 25ํ–‰, in
IPython.core ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฆด๋ฆฌ์Šค์—์„œ, crashhandler
ํŒŒ์ผ "/home/jiangyuping/ipython/IPython/core/crashhandler.py", 28ํ–‰, in
IPython.core์—์„œ ultratb ๊ฐ€์ ธ์˜ค๊ธฐ
ํŒŒ์ผ "/home/jiangyuping/ipython/IPython/core/ultratb.py", 128ํ–‰,
IPython.utils.terminal์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ get_terminal_size
ํŒŒ์ผ "/home/jiangyuping/ipython/IPython/utils/terminal.py", 22ํ–‰, in
backports.shutil_get_terminal_size์—์„œ get_terminal_size๋ฅผ _get_terminal_size๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ
ImportError: ์ด๋ฆ„์ด shutil_get_terminal_size์ธ ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๋ง์€:

pip install backports.shutil_get_terminal_size

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์„ IPython์˜ ์ข…์†์„ฑ์œผ๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋งˆ๋„ ์ด์ „ ๋ฒ„์ „์˜ pip๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ ค๋ฉด:

pip install --upgrade setuptools pip

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งŽ์€ ๊ฒƒ์„ ์‹œ๋„ํ–ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•ด๊ฒฐ๋œ ๊ฒƒ์€ setuptools ์—…๋ฐ์ดํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ pip๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ipython ๋“ฑ์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”! ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์•„์ด๋””์–ด๋ฅผ ์ฃผ์—ˆ๋‹ค ... ๋‚˜๋Š” backports.shutil_get_terminal_size์˜ whl ํŒŒ์ผ๋กœ pip install --upgraded๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ ์ „์—๋Š” ๋‹จ์ˆœํžˆ pip ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด "์š”๊ตฌ ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ถฉ์กฑ๋จ" ๋“ฑ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ Turi์˜ GraphLab Create๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :)

@jnault Turi์˜ GraphLab Create๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์…จ๋‚˜์š”?

์ •ํ™•ํžˆ ๊ธฐ์–ต์€ ์•ˆ๋‚˜๋Š”๋ฐ ๊ฝค ์‰ฌ์› ๋˜๊ฑธ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋‹จ๊ณ„:
1) ํ™•์žฅ์ž๊ฐ€ .whl์ธ ํ•ด๋‹น ํŒŒ์ผ์„ Google์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ 
2) ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ Whl ํŒŒ์ผ ์„ค์น˜ ๋ฐฉ๋ฒ•
ํ . ์˜ค์ผ€์ด snarky ๋˜๋Š” ๋ญ”๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ์ง„์‹ฌ์„ ๋‹ด์•„ ๋„์›€์„ ๋“œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ ๋‚ด๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์ด pypi์—์„œ ์˜จ ๊ฒƒ์ด ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” whl ํŒŒ์ผ์ด Everything์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ‰ํŒ์ด ์ข‹์€ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์™”๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋ช…๋ น์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ถ”์ธกํ•œ๋‹ค: pip install --upgrade backports.shutil_get_terminal_size.whl

@oschow ์ด๊ฒƒ์€ _should_ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

# start by making sure pip, setuptools are up to date:
pip install --upgrade setuptools pip
# uninstall if pip thinks you already have it but don't seem to:
pip uninstall backports.shutil_get_terminal_size
# install it again with out definitely-up-to-date pip:
pip install --upgrade backports.shutil_get_terminal_size

^ Minrk๋Š” ๋” ๋‚˜์€ ์กฐ์–ธ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Minrk๋Š” "pip๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋ฉด"์ด๋ผ๊ณ  ์ผ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์ด ์ดˆ๊ธฐ python ์„ค์น˜์—์„œ ์˜ˆ์•ฝ๋˜์—ˆ์ง€๋งŒ ๋ˆ„๋ฝ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋”ฐ๋ผ์„œ ๊ทธ๊ฒƒ์€ ํ˜„์žฌ๋กœ ๋‚˜์—ด๋˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

Graphlab Create๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. minrk์˜ ์†”๋ฃจ์…˜๋„ ์ €๋ฅผ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

@minrk ๋Š” ์ €๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  ์ œ๊ฑฐ ํ›„ ์„ค์น˜๊ฐ€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ ๋‚ด๊ฐ€ ํ•œ ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

pip๊ฐ€ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

pip ์ œ๊ฑฐ backports.shutil_get_terminal_size

ํ™•์‹คํžˆ ์ตœ์‹  pip๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

pip install --upgrade backports.shutil_get_terminal_size

<path-to>/Python/2.7/site-packages/backports/__init__.* ์ œ๊ฑฐ

@bevice ๊ทธ๋Ÿผ?

์ง€๊ธˆ๊นŒ์ง€ ์ด ์Šค๋ ˆ๋“œ๋‚˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์ œ์•ˆ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹ฌ๋ฆฌ๋ฉด

$ python -s
>>> from backports.shutil_get_terminal_size import get_terminal_size
>>> get_terminal_size()
terminal_size(columns=112, lines=40)

ํšจ๊ณผ๊ฐ€์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ipython ๋˜๋Š” jupyter notebook์„ ์‹คํ–‰ํ•˜๋ฉด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ shutil_get_terminal_size๋ฅผ ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€ ๊ธฐ๊ณ„๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“  ๋˜ ๋‹ค๋ฅธ backports.<something> ํŒจํ‚ค์ง€๊ฐ€ ์–ด๋”˜๊ฐ€์— ์„ค์น˜๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์„ ์ฐพ์•„์„œ ์ œ๊ฑฐํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ๋ณด๋ ค๋ฉด pip list ๋ฅผ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

@takluyver ๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

backports-abc (0.4)
backports.shutil-get-terminal-size (1.0.0)
backports.ssl-match-hostname (3.4.0.2)

๋‚ด๊ฐ€ ์ง€๊ธˆ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

backports.ssl-match-hostname ๋ฐ backports.shutil-get-terminal-size ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ์•„์ฝ˜๋‹ค ๋˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ "๋‹ค์‹œ ์‹œ์ž‘"ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์–ธ๊ธ‰ ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์žฌ์‹œ์ž‘์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ œ๊ฑฐํ•œ ํ›„ ๋‹ค์‹œ ์ œ๊ฑฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ œ๊ฑฐํ•  ํ•ญ๋ชฉ์„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋‹ค๋ฅธ ์žฅ์†Œ์— ์‚ฌ๋ณธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด backports.ssl-match-hostname ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ œ๊ฑฐ๋œ ์ƒํƒœ๋กœ ๋‘์‹ญ์‹œ์˜ค(์ ์–ด๋„ ํ•„์š”ํ•œ ๊ฒƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€...)

๊ดœ์ฐฎ์€. ๋ง์”€ํ•ด ์ฃผ์‹  ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜ต์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌธ์ œ๋Š” pymc3๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” nipype ๋„๊ตฌ ์ƒ์ž์— ์ผ๋ถ€ ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋‹ค ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด์•ผ ํ•˜๋‚˜์š”? ์ด๊ฒƒ์ด ์ตœํ›„์˜ ์ˆ˜๋‹จ์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

IPython์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋™์ผํ•œ Python์—์„œ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๋ฉด ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

import backports
print(backports)

๋ฐฑํฌํŠธ๊ฐ€ ์„ค์น˜๋œ ์ƒํƒœ์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

>>> import backports
>>> print(backports)
<module 'backports' from '/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

>>> import backports
>>> print(backports)
<module 'backports' (built-in)>

๊ทธ๋ž˜์„œ ๋ถ„๋ช…ํžˆ ์–ด๋”˜๊ฐ€์— ๋ญ”๊ฐ€๋ฅผ ๋ง์น˜๋Š” ํŒจํ‚ค์ง€๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๋“ค์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์ฐพ์•˜๋”๋ผ๋„ ๋ฃจํŠธ ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋”์— ํ‘œ์‹œ๋œ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ( /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports/ )?

์•„๋‹ˆ์š”, ์ด์ œ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ ํด๋”๊ฐ€ ์™„์ „ํžˆ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋” ๊ทธ๋Œ€๋กœ
../site-packages/backports.shutil-get-terminal-size-1.0.0 ๋Š” ์„ค์น˜๋  ๋•Œ ๊ฑฐ๊ธฐ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Python์—์„œ backports.__path__ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐฑํฌํŠธ๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ:
['/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

์ด์ „๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๊นŒ? ํ™•์‹คํžˆ ๋น ์ง„๊ฑด๊ฐ€์š”? ๊ฑฐ๊ธฐ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๊ทธ ๊ธธ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” conda2_serverwide ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฑํฌํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/future-0.15.2-py27_0/lib/python2.7/site-packages/future/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/configparser-3.5.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/ssl_match_hostname-3.4.0.2-py27_1/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/get_terminal_size-1.0.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/future/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0/lib/python2.7/site-packages/backports
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_bak
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/get_terminal_size-1.0.0-py27_0/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/ssl_match_hostname-3.4.0.2-py27_1/lib/python2.7/site-packages/backports.ssl_match_hostname-3.4.0.2-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports-1.0-py27_0.tar.bz2
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports.shutil_get_terminal_size-1.0.0-py27_1.tar.bz2
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc-0.4-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc-0.4-py2.7.egg-info
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports-1.0-py27_0.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports_abc-0.4-py27_0.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/conda-meta/backports.shutil_get_terminal_size-1.0.0-py27_1.json
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc.py
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc.py
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports_abc.pyc
file:///nobackup/archimedes1/Glad/anaconda2_serverwide/pkgs/backports_abc-0.4-py27_0/lib/python2.7/site-packages/backports_abc.pyc

backports ์ œ๊ฑฐ ํ›„ Python์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์…จ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ Python์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  backports.__path__ ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์„ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋˜ํ•œ ๋‹ค์Œ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

> conda list | grep backports
backports                 1.0                      py27_0  
backports.shutil_get_terminal_size 1.0.0                    py27_1    conda-forge
backports_abc             0.4                      py27_0  

๊ทธ๋ž˜์„œ conda๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ backports.shutil_get_terminal_size๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.
> conda uninstall backports.shutil_get_terminal_size

์ด์ œ ํŒŒ์ด์ฌ์—์„œ backports.shutil_get_terminal_size๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋ฉด ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ipython๊ณผ jupyter๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  jupyter์™€ backports.shutil_get_terminal_size๋„ ์„ค์น˜๋œ conda๋ฅผ ํ†ตํ•ด ipython์„ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ _์—ฌ์ „ํžˆ_ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ์–ด๋ฆฌ๋‘ฅ์ ˆํ•˜๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ conda๋ฅผ ํ†ตํ•ด ์„ค์น˜๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  pip๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. _์—ฌ์ „ํžˆ_ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค....

ํŒŒ์ด์ฌ์„ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?

๋‹ซ๊ณ ( exit() ) ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

๋ฐฑํฌํŠธ ํ™•์ธ:

> conda list | grep backports
backports                 1.0                      py27_0  
backports.shutil_get_terminal_size 1.0.0                    py27_1    conda-forge
backports_abc             0.4                      py27_0  

๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ Python์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

>>> import backports
>>> backports.shutil_get_terminal_size
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'shutil_get_terminal_size'

์—…๊ทธ๋ ˆ์ด๋“œ ์‹œ๋„:

> pip install --upgrade backports.shutil_get_terminal_size
Requirement already up-to-date: backports.shutil_get_terminal_size in /nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก 'terminal.py'๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ๋ฐฑํฌํŠธ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ Python์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ๋‹ค์Œ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

import backports
backports.__path__

๋ฌด์—‡์„ ์–ป์Šต๋‹ˆ๊นŒ?

>>> import backports
>>> backports.__path__
['/home/raid2/mihai/.local/lib/python2.7/site-packages/backports', '/nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

์ด์ „ ๋””๋ ‰ํ† ๋ฆฌ( /home/raid2 ์•„๋ž˜์— ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ)์— ์„ค์น˜๋œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์‹œ์Šคํ…œ ์ „์ฒด์˜ python ๋ฐ ipython ํŒจํ‚ค์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋กœ์ปฌ ์•„๋‚˜์ฝ˜๋‹ค ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฉํ•ดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค์€ /home/raid2... ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— backports.shutil_get_terminal_size ํŒจํ‚ค์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์ „์ฒด ์„ค์น˜(์ด์ „ ๋ฒ„์ „์˜ ipython์ด ์žˆ์Œ)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ œ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์‹  ์ฝ˜๋‹ค๋กœ ํ™˜๊ฒฝ์„ ์‹œ์ž‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
export PATH="/nobackup/archimedes1/Glad/anaconda2_serverwide/bin:$PATH" , ์ฐฝ ํฌ๊ธฐ ๊ธฐ๋Šฅ์„ ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊น…์„ ๋•๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์ถœ๋ ฅ์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://gist.github.com/takluyver/73cf4e7e7cff4d95f3b23ea80d59bcab

์ข‹์•„!!!1

์ด๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ๋“  ์ž‘๋™ํ•˜๋„๋ก ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
conda์™€ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ipython ๋ฐ jupyter ๋ฐ backports.shutil_get_window_size๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

conda uninstall jupyter ipython backports.shutil_get_window_size
pip uninstall jupyter ipython backports.shutil_get_window_size

ํŒจํ‚ค์ง€์— ์•„๋ฌด๊ฒƒ๋„ ๋‚จ์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ conda๋กœ ipython๋งŒ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

> conda install ipython
Fetching package metadata .........
Solving package specifications: ..........

Package plan for installation in environment //nobackup/archimedes1/Glad/anaconda2_serverwide:

The following NEW packages will be INSTALLED:

    backports:                          1.0-py27_0              
    backports.shutil_get_terminal_size: 1.0.0-py27_1 conda-forge
    ipython:                            5.1.0-py27_1 conda-forge

Proceed ([y]/n)? y

Extracting packages ...
[      COMPLETE      ]|###################################################################################| 100%
Linking packages ...
[      COMPLETE      ]|###################################################################################| 100%
mihai<strong i="11">@archimedes</strong>:/tmp > ipython

๊ทธ๋ฆฌ๊ณ  ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!!! ์‹œ๊ฐ„์„ ๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @takluyver !

๋‹ค์Œ์€ ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

In [2]: run debug_namespace_pkg.py
mod: <module 'backports' from '/home/raid2/mihai/.local/lib/python2.7/site-packages/backports/__init__.pyc'>

backports.__path__ = ['/home/raid2/mihai/.local/lib/python2.7/site-packages/backports', '//nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports']

Found /home/raid2/mihai/.local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


Found //nobackup/archimedes1/Glad/anaconda2_serverwide/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์€ ์ด์ œ ์›๋ž˜๋Œ€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๋Š”๋‹ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๊ณ  ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์œ„์—์„œ ๊ณต์œ ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

aranyo-139-61:Desktop shiva$ python debug_namespace_pkg.py
mod: <module 'backports' (built-in)>

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

Found /usr/local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


Found /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports
No __init__.py found
Found /usr/local/lib/python2.7/site-packages/backports
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

์ด๊ฒƒ ์ข€ ๋„์™€์ฃผ์‹œ๊ฒ ์–ด์š”? ๋‚˜๋Š” conda๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”!

/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ์— ๋ญ”๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ œ๊ฑฐ/์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports์— ๋ญ”๊ฐ€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ œ๊ฑฐ/์ด๋ฆ„ ๋ณ€๊ฒฝ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋””๋ฒ„๊น… ์Šคํฌ๋ฆฝํŠธ ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๊ฐ€์ ธ์™€์„œ ๋‹ค์‹œ ์‹คํ–‰ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

mod: <module 'backports' (built-in)>

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

-- Found /usr/local/lib/python2.7/site-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)


-- Found /usr/local/lib/python2.7/site-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ๊ฑฐ/์ด๋ฆ„ ๋ณ€๊ฒฝํ•œ ํ›„ Python์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์…จ์Šต๋‹ˆ๊นŒ? ์—ฌ์ „ํžˆ ์–ด๋–ป๊ฒŒ๋“  ์ฐพ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

"python debug_namespace_pkg.py" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ํ•˜๊ธฐ ์ „์— ํ„ฐ๋ฏธ๋„์„ ๋‹ค์‹œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  /Users/shiva/Library/Python/2.7/lib/python/site-packages/backports ๋Š” ํ™•์‹คํžˆ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์ด์ „๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ถ„๋ช…ํžˆ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํด๋”์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ง€์ •ํ•œ ์œ„์น˜์—์„œ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. /usr/local/lib/python2.7/site-packages/backports ์„(๋ฅผ) ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ, ์ฐพ์•„์•ผ ํ•  ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. /Users/shiva ์•„๋ž˜์— ์žˆ๋Š” ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ๋“  ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์ค„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์–ด๋–ป๊ฒŒ๋“  ์ฐพ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

backports.__path__ = ['/Users/shiva/Library/Python/2.7/lib/python/site-packages/backports']

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•œ ํ›„์— ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :ํ˜ผ๋ž€์Šค๋Ÿฌ์šด:

์•„ํ•˜, .pkg ํŒŒ์ผ์— ๋Œ€ํ•ด ์ „ํ˜€ ๋ชฐ๋ž๋˜ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. backports.pkg ๋ผ๋Š” ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

( backports.pkg ๋Š” ์•„๋งˆ๋„ site-packages ๋””๋ ‰ํ† ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ์žˆ์„ ๊ฒƒ์ด์ง€๋งŒ ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๊ณณ์— ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋‚˜๋Š” ์–ด๋””์—์„œ backports.pkg๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ ํด๋”์—์„œ find ./* -name backports.pkg๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์นจ๋‚ด ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ํด๋”์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์ œ๊ฑฐํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋„์™€ ์ฃผ์…”์„œ ์ •๋ง๋กœ ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค :)

์ด์ƒํ•˜๊ฒŒ๋„, ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋‹จ์ง€ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ์™œ ๋‹ค๋ฅธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ž‘๋™ํ•ด์„œ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค.

๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ pip ์ œ๊ฑฐ/์„ค์น˜๊ฐ€ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””๋ฒ„๊น… ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค( python test.py ๋กœ ์ธํ•ด):

mod: <module 'backports' (built-in)>

backports.__path__ = ['/home/ihincks/.local/lib/python2.7/site-packages/backports']

-- Found /usr/local/lib/python2.7/dist-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

๋‚˜๋Š” ๊ฐ€์ง€๊ณ ์žˆ๋‹ค:

$ ls /home/ihincks/.local/lib/python2.7/site-packages/ | grep backports
backports_abc-0.5.dist-info
backports_abc.py
backports_abc.pyc
backports.shutil_get_terminal_size-1.0.0

๊ฒฐ๊ตญ ๋‹ค์Œ ํ•ดํ‚น ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋ฆฌ๋ˆ…์Šค์—์„œ) /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py ๋ฅผ ์—ด๊ณ  ํ–‰์„ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size

์—๊ฒŒ

from shutil_backports import get_terminal_size as _get_terminal_size

๋‹ค์‹œ ๊ฐ™์€ ์ผ - ์–ด๋–ป๊ฒŒ ๋“  ๊ฑฐ๊ธฐ์— ์—†๋Š” ๊ฒƒ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. backport.pkg ํŒŒ์ผ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์Šคํฌ๋ฆฝํŠธ์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ์Šคํฌ๋ฆฝํŠธ์˜ ์ถœ๋ ฅ:

mod: <module 'backports' (built-in)>

backports.__path__ = ['/home/ihincks/.local/lib/python2.7/site-packages/backports']

-- Found /usr/local/lib/python2.7/dist-packages/backports --
Files: ['__init__.py', '__init__.pyc', 'shutil_get_terminal_size']
__init__.py contains:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

ํ™”๋‚œ๋‹ค; ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๋กœ( /home/ihincks/... )๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

/home/ihincks/.local/lib/python2.7/site-packages/ ์— backports ๋ฅผ ์ฐพ๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌด์—‡์„ ์ฐพ๋Š”์ง€ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ /home/ihincks/.local/lib/python2.7/site-packages/ ์˜ ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

backports_abc-0.5.dist-info
backports_abc.py
backports_abc.pyc
backports.shutil_get_terminal_size-1.0.0
bleach
bleach-1.5.0.dist-info
certifi
certifi-2016.9.26.dist-info
configparser-3.5.0.dist-info
configparser-3.5.0-nspkg.pth
configparser.py
configparser.pyc
entrypoints-0.2.2.dist-info
entrypoints.py
entrypoints.pyc
enum
enum34-1.1.6.dist-info
functools32
functools32-3.2.3.post2.dist-info
html5lib
html5lib-0.9999999.dist-info
ipykernel
ipykernel-4.5.2.dist-info
ipython_genutils
ipython_genutils-0.1.0.dist-info
ipywidgets
ipywidgets-5.2.2.dist-info
jinja2
Jinja2-2.8.dist-info
jsonschema
jsonschema-2.5.1.dist-info
jupyter_client
jupyter_client-4.4.0.dist-info
jupyter_console
jupyter_console-5.0.0.dist-info
jupyter_core
jupyter_core-4.2.1.dist-info
markupsafe
MarkupSafe-0.23.dist-info
mistune-0.7.3.dist-info
mistune.py
mistune.pyc
nbconvert
nbconvert-5.0.0.dist-info
nbformat
nbformat-4.2.0.dist-info
pandocfilters-1.4.1.dist-info
pandocfilters.py
pandocfilters.pyc
pexpect
pexpect-4.2.1.dist-info
pickleshare-0.7.4.dist-info
pickleshare.py
pickleshare.pyc
prompt_toolkit
prompt_toolkit-1.0.9.dist-info
ptyprocess
ptyprocess-0.5.1.dist-info
pyzmq-16.0.2.dist-info
qtconsole
qtconsole-4.2.1.dist-info
simplegeneric-0.8.1.dist-info
simplegeneric.py
simplegeneric.pyc
singledispatch-3.4.0.3.dist-info
singledispatch_helpers.py
singledispatch_helpers.pyc
singledispatch.py
singledispatch.pyc
six-1.10.0.dist-info
six.py
six.pyc
terminado
terminado-0.6.dist-info
testpath
testpath-0.3.dist-info
tornado
tornado-4.4.2.dist-info
traitlets
traitlets-4.3.1.dist-info
wcwidth
wcwidth-0.1.7.dist-info
widgetsnbextension
widgetsnbextension-1.2.6.dist-info
zmq

backports.shutil_get_terminal_size-1.0.0 ์€(๋Š”) ๋ฌด์—‡์ด๊ณ  ๊ทธ ์•ˆ์— ๋ฌด์—‡์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

backports.shutil_get_terminal_size ๋‹จ์ผ ํ•จ์ˆ˜ get_terminal_size ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. ์ด ํด๋”์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

./
โ”œโ”€โ”€ backports
โ”‚ย ย  โ”œโ”€โ”€ __init__.py
โ”‚ย ย  โ””โ”€โ”€ shutil_get_terminal_size
โ”‚ย ย      โ”œโ”€โ”€ get_terminal_size.py
โ”‚ย ย      โ””โ”€โ”€ __init__.py
โ”œโ”€โ”€ backports.shutil_get_terminal_size.egg-info
โ”‚ย ย  โ”œโ”€โ”€ dependency_links.txt
โ”‚ย ย  โ”œโ”€โ”€ PKG-INFO
โ”‚ย ย  โ”œโ”€โ”€ SOURCES.txt
โ”‚ย ย  โ””โ”€โ”€ top_level.txt
โ”œโ”€โ”€ HISTORY.rst
โ”œโ”€โ”€ LICENSE
โ”œโ”€โ”€ MANIFEST.in
โ”œโ”€โ”€ PKG-INFO
โ”œโ”€โ”€ README.rst
โ”œโ”€โ”€ setup.cfg
โ”œโ”€โ”€ setup.py
โ”œโ”€โ”€ test_shutil_get_terminal_size.py
โ””โ”€โ”€ tox.ini

PKG-INFO ์˜ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Metadata-Version: 1.1
Name: backports.shutil_get_terminal_size
Version: 1.0.0
Summary: A backport of the get_terminal_size function from Python 3.3's shutil.
Home-page: https://github.com/chrippa/backports.shutil_get_terminal_size
Author: Christopher Rosell
Author-email: [email protected]
License: MIT
Description: backports.shutil_get_terminal_size
        ==================================

        A backport of the `get_terminal_size`_ function from Python 3.3's shutil.

        Unlike the original version it is written in pure Python rather than C,
        so it might be a tiny bit slower.

        .. _get_terminal_size: https://docs.python.org/3/library/shutil.html#shutil.get_terminal_size


        Example usage
        -------------

            >>> from backports.shutil_get_terminal_size import get_terminal_size
            >>> get_terminal_size()
            terminal_size(columns=105, lines=33)



        History
        =======

        1.0.0 (2014-08-19)
        ------------------

        First release.

Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.2

์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์ˆ˜๋™์œผ๋กœ sdist์˜ ์••์ถ•์„ ํ‘ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋””๋ ‰ํ† ๋ฆฌ( backports.shutil_get_terminal_size-1.0.0 )๋ฅผ ์‚ญ์ œํ•ด๋„ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ํ™์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. /usr/local/lib/python2.7/dist-packages/IPython/utils/terminal.py ์„ ์›๋ž˜ ํ˜•์‹์œผ๋กœ ๋˜๋Œ๋ ธ์Šต๋‹ˆ๋‹ค. ipython ๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ImportError: No module named shutil_get_terminal_size ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ /home/ihincks/.local/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0 ํด๋”๋ฅผ ์ž„์‹œ๋กœ /home/ihincks ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์˜ค๋ฅ˜๋กœ ipython ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž, ๊ทธ ํด๋”๋Š” ๊ทธ์ € ์ฒญ์–ด์ผ ๋ฟ์ด๊ณ  /home/ihincks/.local/lib/python2.7/site-packages/backports ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ์•„์ง ํ™•์‹ ์ด ์„œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :-(

ํ , ๋” ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ ˆ๋ฐ˜๋งŒ ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. python ๊ฒฝ๋กœ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜ ํ•ญ๋ชฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฝค ์ž˜ ์ˆจ๊ฒจ์ง„ ํ‘๋งˆ๋ฒ•์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ๋‚˜์—๊ฒŒ ssh ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜์—ฌ ์ฃผ๋ณ€์„ ๋‘˜๋Ÿฌ๋ณด๊ณ  ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๊บผ๋ คํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—์„œ ์ด๊ฒƒ์„ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค.

์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค........์ตœ๊ทผ์— jupyter๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ipython ๋…ธํŠธ๋ถ ํŒŒ์ผ์„ ์—ด๋ ค๊ณ  ํ•˜๋ฉด backports.shutil_get_terminal_size์— ๋Œ€ํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜๋กœ ์ปค๋„์ด ์ฃฝ์—ˆ๋‹ค๊ณ  ๋‚˜์˜ต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ pip๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  jupyter ๋ฐ backports.shutil-get-terminal-size๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์‹œ ์„ค์น˜ํ•œ ํ›„ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ python2 -m ipykernel install --user ๋ช…๋ น์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚ด ์ปค๋„์— ์ƒ๋ช…์„ ๋ถˆ์–ด๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ : http://askubuntu.com/questions/847263/install-jupyter-for-python-2-7-in-ubuntu-14-04

๊ทธ๋ž˜์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  /usr/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0.dist-info๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ ๋‹ค์Œ ํ•ญ๋ชฉ๋งŒ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

total 28
-rw-r--r--. 1 root root  596 Feb 27 10:42 DESCRIPTION.rst
-rw-r--r--. 1 root root    4 Feb 27 10:42 INSTALLER
-rw-r--r--. 1 root root 1175 Feb 27 10:42 METADATA
-rw-r--r--. 1 root root  701 Feb 27 10:42 metadata.json
-rw-r--r--. 1 root root 1455 Feb 27 10:42 RECORD
-rw-r--r--. 1 root root   10 Feb 27 10:42 top_level.txt
-rw-r--r--. 1 root root  110 Feb 27 10:42 WHEEL

๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ pip --upgrade, pip uninstall/install ipython ๋“ฑ ์ดํ›„์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ pip๋Š” ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ํœ ๋งŒ ์„ค์น˜ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. .tar.gz ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ipython์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ wheel ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” RHEL7์—์„œ ์‹คํ–‰ ์ค‘์ด๋ฏ€๋กœ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

.dist-info ๋กœ ๋๋‚˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์„ค์น˜๋œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋ฉฐ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์ธ์ ‘ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /usr/lib/python2.7/site-packages/backports

์ฝ”๋“œ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pip install --user backports.shutil_get_terminal_size , ipython์ด ๋ฃจํŠธ ๋˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ดœ์ฐฎ๋‹ค๋ฉด ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

๋„ˆํฌ๋“ค์ด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค๋ฉด

pip install backports.shutil_get_terminal_size

ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

import sys
print sys.path

ipython ๋ชจ๋ธ์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ ์•ž์— ๋ฐฑํฌํŠธ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธ ํ•˜๊ณ  ์ง์ ‘ ์‚ญ์ œํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ฒ„๊ทธ์˜ ๋งค์šฐ ์ด์ƒํ•œ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

pde<strong i="6">@damoclid</strong>:~$ ipython
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/usr/lib/python2.7/dist-packages/IPython/core/application.py", line 25, in <module>
    from IPython.core import release, crashhandler
  File "/usr/lib/python2.7/dist-packages/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "/usr/lib/python2.7/dist-packages/IPython/core/ultratb.py", line 128, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "/usr/lib/python2.7/dist-packages/IPython/utils/terminal.py", line 22, in <module>
    from backports.shutil_get_terminal_size import get_terminal_size as _get_terminal_size
ImportError: No module named shutil_get_terminal_size
pde<strong i="7">@damoclid</strong>:~$ python
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
[GCC 6.3.0 20170118] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import backports.shutil_get_terminal_size
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named shutil_get_terminal_size
>>> import sys
>>> print [p for p in sys.path if os.path.exists(p + "/backports")]
['/usr/lib/python2.7/dist-packages']
>>> import backports
>>> backports.__path__
['/usr/local/lib/python2.7/dist-packages/backports']
>>> os.path.exists("/usr/local/lib/python2.7/dist-packages/backports")
False
>>> dir(backports)
['__doc__', '__name__', '__path__']
>>> 
pde<strong i="8">@damoclid</strong>:~$ cd /usr/local/bin/
pde<strong i="9">@damoclid</strong>:/usr/local/bin$ cd ..
pde<strong i="10">@damoclid</strong>:/usr/local$ sudo find . -iname \*backports\*
pde<strong i="11">@damoclid</strong>:/usr/local$

python์ด backports / backports.shutil_get_terminal_size ํŒจํ‚ค์ง€๋œ ๊ธฐ๋ณธ OS๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์ด์œ  ๋˜๋Š” /usr/local์—์„œ backports ์˜ ์œ ๋ น ๋ฒ„์ „์„ ์ฐพ๋Š” ์ด์œ ๋ฅผ ์ •๋ง ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. /lib. ๋‚ด sys.path :

['', '/usr/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/ropevim-0.7.0-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/pde/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

pde<strong i="13">@damoclid</strong>:/usr/local$ ls -ld `dpkg -L python-backports-shutil-get-terminal-size `
drwxr-xr-x   26 root root   4096 Mar  7 23:01 /./
drwxr-xr-x   12 root root   4096 Apr  5  2014 /usr/
drwxr-xr-x  201 root root  36864 May 14 22:01 /usr/lib/
drwxr-xr-x   27 root root  20480 Apr  4 15:53 /usr/lib/python2.7/
drwxr-xr-x  296 root root  20480 May 15 18:02 /usr/lib/python2.7/dist-packages/
drwxr-xr-x    3 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports/
-rw-r--r--    1 root root     75 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/__init__.py
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/
-rw-r--r--    1 root root      1 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/dependency_links.txt
-rw-r--r--    1 root root   1402 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/PKG-INFO
-rw-r--r--    1 root root     10 Jul 28  2016 /usr/lib/python2.7/dist-packages/backports.shutil_get_terminal_size-1.0.0.egg-info/top_level.txt
-rw-r--r--    1 root root   2913 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/get_terminal_size.py
-rw-r--r--    1 root root    338 Aug 19  2014 /usr/lib/python2.7/dist-packages/backports/shutil_get_terminal_size/__init__.py
drwxr-xr-x  398 root root  12288 May 14 22:01 /usr/share/
drwxr-xr-x 3114 root root 126976 May 15 18:02 /usr/share/doc/
drwxr-xr-x    2 root root   4096 May 15 17:35 /usr/share/doc/python-backports-shutil-get-terminal-size/
-rw-r--r--    1 root root    333 Jul 28  2016 /usr/share/doc/python-backports-shutil-get-terminal-size/changelog.Debian.gz
-rw-r--r--    1 root root     71 Aug 19  2014 /usr/share/doc/python-backports-shutil-get-terminal-size/changelog.gz
-rw-r--r--    1 root root   1372 Jul 28  2016 /usr/share/doc/python-backports-shutil-get-terminal-size/copyright

๋‹ค์‹œ ์—ด์–ด์„œ 5.4๋กœ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „์„ ์œ„ํ•ด shutil_get_terminal_size ๋ฅผ ๊ณต๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@Carreau fwiw ์—ฌ๊ธฐ์— pip ๋˜๋Š” python ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์–ด๋ฆฌ์„์€ ์ง“์„ ํ•œ ๊ฒƒ ๊ฐ™๊ฑฐ๋‚˜ ๋‘˜ ๋‹ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์ง€์‹์ด ํ’๋ถ€ํ•œ ํ• ์‚ฌ๋žŒ๋“ค์„ ์ง€๋‚˜์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” backports ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ช‡๋ช‡ ๋ถ„๋“ค์ด ๊ทธ๋Ÿฐ ๋‚ด์šฉ์„ ๋ณด๊ณ ํ•˜์…จ๋Š”๋ฐ ์–ด๋””์„œ ์™”๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” .pkg ๋ฐ .pth ํŒŒ์ผ์„ ์ฐพ์•„๋ณด์‹ญ์‹œ์˜ค.

๋‚ด ์‹œ์Šคํ…œ์˜ @Carreau ์—์„œ ๋ฌธ์ œ๋Š” configparser ๋ชจ๋“ˆ์˜ ์กด์žฌ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

pde<strong i="8">@damoclid</strong>:~/aip$ sudo grep backport `locate *.pth`
/usr/local/lib/python2.7/dist-packages/configparser-3.5.0-nspkg.pth:import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('backports',));ie = os.path.exists(os.path.join(p,'__init__.py'));m = not ie and sys.modules.setdefault('backports', types.ModuleType('backports'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
pde<strong i="9">@damoclid</strong>:~/aip$ pip freeze | grep configp
configparser==3.3.0.post2
pde<strong i="10">@damoclid</strong>:~/aip$ cd /usr/local/lib/
pde<strong i="11">@damoclid</strong>:/usr/local/lib$ find . -iname *configp*
./python2.7/dist-packages/configparser-3.5.0.dist-info
./python2.7/dist-packages/future/moves/configparser.py
./python2.7/dist-packages/future/moves/configparser.pyc
./python2.7/dist-packages/configparser.py
./python2.7/dist-packages/configparser-3.5.0-nspkg.pth
./python2.7/dist-packages/configparser.pyc
pde<strong i="12">@damoclid</strong>:/usr/local/lib$ sudo pip uninstall configparser
Not uninstalling configparser at /usr/lib/python2.7/dist-packages, outside environment /usr
pde<strong i="13">@damoclid</strong>:/usr/local/lib$ sudo rm -rf `find . -iname *configp*`
pde<strong i="14">@damoclid</strong>:/usr/local/lib$ ipython
Python 2.7.13 (default, Jan 19 2017, 14:48:08) 
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]:                                                                                                                                                                 
Do you really want to exit ([y]/n)? y

๋””๋ฒ„๊น…์— ๋„์›€์„ ์ฃผ์‹  @erikrose ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

#10587 ๊ณต๊ธ‰์—…์ฒด๋กœ ๋งˆ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒƒ๋“ค๊ณผ IPython 5.4๋Š” ๊ณง ์ถœ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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