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

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

์•ˆ๋…•ํ•˜์„ธ์š”,
๋‚˜๋Š” ipykernel ์œ„์— ์ปค๋„์„ ๋งŒ๋“œ๋Š” ์ž‘์€ ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์ง„์ง€ ๊ฝค ๋˜์—ˆ๋Š”๋ฐ ์˜ค๋Š˜ Jupyter๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ฐฐํฌํ–ˆ์„ ๋•Œ ipykernel์„ ํ˜ธ์ถœํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํƒ ์ถ”์ ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

  File "<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg/ipykernel/__init__.py", line 2, in <module>
    from .connect import *
  File "<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg/ipykernel/connect.py", line 13, in <module>
    from IPython.core.profiledir import ProfileDir
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/application.py", line 24, in <module>
    from IPython.core import release, crashhandler
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/IPython/core/ultratb.py", line 126, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg/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

๋ถ„๋ช…ํžˆ IPython๊ณผ ipykernel์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•œ ์ดํ›„๋กœ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ญ”์ง€ ์•„์„ธ์š”? ์ €๋Š” Python 2.7.10์ด ์žˆ๋Š” OSX ์ƒ์ž์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ ์ŠคํŠธ, ์•„์šฐ๋ ๋ฆฌ์•™

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

์–ด๋–ป๊ฒŒ ๋“  ์ข…์†์„ฑ์„ ์–ป์ง€ ์•Š๊ณ  IPython์„ ์„ค์น˜ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ์„ ๋ณธ ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋„ˆ๋ฌด ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ setuptools๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  easy_install ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋น„๊ต์  ์ตœ๊ทผ์˜ pip/setuptools๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

pip install --upgrade setuptools pip

๊ทธ๋Ÿฐ ๋‹ค์Œ, pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IPython์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด ๋ณด์‹ญ์‹œ์˜ค(pip๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•ฉ๋‹นํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํ•œ easy_install์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค):

pip uninstall ipython
pip install ipython

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

์–ด๋–ป๊ฒŒ ๋“  ์ข…์†์„ฑ์„ ์–ป์ง€ ์•Š๊ณ  IPython์„ ์„ค์น˜ ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ์„ ๋ณธ ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋„ˆ๋ฌด ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ setuptools๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  easy_install ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋น„๊ต์  ์ตœ๊ทผ์˜ pip/setuptools๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

pip install --upgrade setuptools pip

๊ทธ๋Ÿฐ ๋‹ค์Œ, pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IPython์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด ๋ณด์‹ญ์‹œ์˜ค(pip๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•ฉ๋‹นํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํ•œ easy_install์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค):

pip uninstall ipython
pip install ipython

ํŠนํžˆ ์ด ๊ฒฝ์šฐ backports.shutil_get_terminal_size ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ๋ฏธ์Šคํ„ฐ๋ฆฌ๋Š” ๊นŠ์–ด์ง„๋‹ค. ๋ช…๋ น์ค„์—์„œ pip ๋ฅผ ํ†ตํ•ด Jupyter๋ฅผ ์„ค์น˜ํ•˜๋ฉด setuptools๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Jupyter๋ฅผ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์„ฑ๊ณตํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋จผ์ € 3๊ฐœ์˜ ํŒจํ‚ค์ง€๋งŒ ์„ค์น˜๋œ ๋ฒ ์–ด๋ณธ Python 2.7.11 ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

$ pip list
pip (8.1.2)
setuptools (23.1.0)
virtualenv (15.0.2)

pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Jupyter๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ๋‹ค์Œ ํŒจํ‚ค์ง€๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

$ pip install jupyter
<long output>
$ pip list
appnope (0.1.0)
backports-abc (0.4)
backports.shutil-get-terminal-size (1.0.0)
backports.ssl-match-hostname (3.5.0.1)
certifi (2016.2.28)
configparser (3.5.0)
decorator (4.0.10)
entrypoints (0.2.2)
functools32 (3.2.3.post2)
gnureadline (6.3.3)
ipykernel (4.3.1)
ipython (4.2.0)
ipython-genutils (0.1.0)
ipywidgets (5.1.5)
Jinja2 (2.8)
jsonschema (2.5.1)
jupyter (1.0.0)
jupyter-client (4.3.0)
jupyter-console (4.1.1)
jupyter-core (4.1.0)
MarkupSafe (0.23)
mistune (0.7.2)
nbconvert (4.2.0)
nbformat (4.0.1)
notebook (4.2.1)
pathlib2 (2.1.0)
pexpect (4.1.0)
pickleshare (0.7.2)
pip (8.1.2)
ptyprocess (0.5.1)
Pygments (2.1.3)
pyzmq (15.2.0)
qtconsole (4.2.1)
setuptools (23.1.0)
simplegeneric (0.8.1)
singledispatch (3.4.0.3)
six (1.10.0)
terminado (0.6)
tornado (4.3)
traitlets (4.2.1)
wheel (0.29.0)
widgetsnbextension (1.2.3)

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ setup.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ Jupyter๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด(์„ธ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๋ชจ๋“ˆ pip , setuptools ๊ฐ€ ์žˆ๋Š” ์ƒˆ๋กœ์šด 2.7.11 ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. virtualenv ):

#!/usr/bin/env python
import setuptools
setuptools.setup(
    ...
    install_requires = [
        "jupyter"],
   ...

... ๊ทธ๋Ÿฌ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

$ pip list
pip (8.1.2)
setuptools (23.1.0)
virtualenv (15.0.2)
$ ./setup.py install
<long output>
Searching for entrypoints
Reading https://pypi.python.org/simple/entrypoints/
No local packages or download links found for entrypoints
error: Could not find suitable distribution for Requirement.parse('entrypoints')
make: *** [install] Error 1

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ _did_ ์„ค์น˜ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋‚˜์—ดํ•  ๋•Œ ipython ๋ฐ jupyter-console ๊ฐ€ ์œ„์™€ ๊ฐ™์ด 4.2.0 ๋ฐ 4.1.1 ๋Œ€์‹  ๊ฐ๊ฐ ๋ฒ„์ „ 5.0.0b4 ๋ฐ 5.0.0b1์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pip ๋กœ Jupyter๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํŒจํ‚ค์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ pip list
ipykernel (4.3.1)
ipython (5.0.0b4)
ipywidgets (5.1.5)
jupyter (1.0.0)
jupyter-client (4.3.0)
jupyter-console (5.0.0b1)
nbconvert (4.2.0)
notebook (4.2.1)
pip (8.1.2)
qtconsole (4.2.1)
setuptools (23.1.0)
tornado (4.3)
traitlets (4.2.1)
wheel (0.29.0)
widgetsnbextension (1.2.3)

์—ฌ๊ธฐ์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. setuptools -powered setup.py ์Šคํฌ๋ฆฝํŠธ์—์„œ jupyter ๋ฅผ ์ข…์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์‹คํŒจํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ตœ์ƒ์˜,
์•„์šฐ๋ ๋ฆฌ์•™

์ด๋Š” ์•„๋งˆ๋„ setuptools๊ฐ€ ๊ฐ€์ ธ์˜ฌ ๋•Œ pip๊ฐ€ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์–ป๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์ด์ „ setuptools๋กœ ์ธํ•œ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ). ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

python -c 'import setuptools; print(setuptools, setuptools.__version__)'

๊ทธ๋ฆฌ๊ณ  ๋˜ํ•œ:

python -m site

๋˜ํ•œ setup.py์—์„œ setuptools๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ python setup.py install ํ•˜์ง€ ์•Š๊ณ  pip install . ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

$ python -c 'import setuptools; print(setuptools, setuptools.__version__)'
(<module 'setuptools' from '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/setuptools/__init__.pyc'>, '23.1.0')

๊ทธ๋ฆฌ๊ณ 

$ python -m site
sys.path = [
    '/Users/ajmazurie/Data/Professional-MSU/2015.07-MSU-me-Jupyter_in_Classroom/Projects/Callysto/callysto',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter-1.0.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipywidgets-5.1.5-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipykernel-4.3.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/nbconvert-4.2.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter_console-5.0.0b1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/qtconsole-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/notebook-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/widgetsnbextension-1.2.3-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/traitlets-4.2.1-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/ipython-5.0.0b4-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/tornado-4.3-py2.7-macosx-10.10-x86_64.egg',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages/jupyter_client-4.3.0-py2.7.egg',
    '/Users/ajmazurie/<path to python>/lib/python27.zip',
    '/Users/ajmazurie/<path to python>/lib/python2.7',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-darwin',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-mac',
    '/Users/ajmazurie/<path to python>/lib/python2.7/plat-mac/lib-scriptpackages',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-tk',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-old',
    '/Users/ajmazurie/<path to python>/lib/python2.7/lib-dynload',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-darwin',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/lib-tk',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-mac',
    '/Users/ajmazurie/.direnv/pyenv/versions/2.7.11/lib/python2.7/plat-mac/lib-scriptpackages',
    '/Users/ajmazurie/<path to python>/lib/python2.7/site-packages',
]
USER_BASE: '/Users/ajmazurie/.local' (doesn't exist)
USER_SITE: '/Users/ajmazurie/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: False

๋˜ํ•œ setup.py์—์„œ setuptools๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ python setup.py install ํ•˜์ง€ ๋ง๊ณ  pip install . ๋งŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ๊ณ  setuptools์— ๋Œ€ํ•œ ์ง€์‹์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‹ ํ˜ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์ด๊ฒƒ์€ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค! ์œ„์˜ setup.py ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ํด๋”์— pip install . ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Jupyter์™€ ํ•ด๋‹น ์ข…์†์„ฑ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋ถ€์ˆ˜์ ์ธ ์งˆ๋ฌธ์œผ๋กœ python setup.py install ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ์™œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์˜จ๋ผ์ธ ์ฐธ์กฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฒ ์ŠคํŠธ, ์•„์šฐ๋ ๋ฆฌ์•™

python setup.py install ๋Š” easy_install๊ณผ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. easy_install์€ ๋งŽ์€ ๋ถˆ์พŒํ•œ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด pip๊ฐ€ ์ƒ์„ฑ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ฐ€์ ธ์˜จ setuptools๊ฐ€ ์žˆ๋Š” python setup.py install ๋Š” ํ•ญ์ƒ easy_install ๊ฐ€ ํ•˜๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

NFS์—์„œ ๊ณต์œ ๋˜๋Š” virtualvenv์— ipython์„ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. NFS์˜ venv์— ์„ค์น˜ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

NFS๊ฐ€ ์ฐจ์ด๋ฅผ ๋งŒ๋“œ๋Š” ์ด์œ ๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ virtualenv ๋‚ด๋ถ€์˜ pip ๋ฒ„์ „์„ ํ™•์ธํ•˜๊ณ  ์ตœ์‹  ๋ฒ„์ „์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธํ•ด ๋ณด์‹ญ์‹œ์˜ค.

pip install --upgrade setuptools pip

@takluyver "์ผ๋ฐ˜" ํŒŒ์ผ ์‹œ์Šคํ…œ์— ipython์„ ์ž˜ ์„ค์น˜ํ•˜๋Š” ๋™์ผํ•œ pip๊ฐ€ NFS์— ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ์ตœ์‹  ๋ฒ„์ „์˜ pip์ž…๋‹ˆ๋‹ค.

๊ธฐ๊ดดํ•œ. NFS๊ฐ€ ์™œ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ตœ์‹  pip (8.1.2) ๋ฐ ์ตœ์‹  setuptools (25.1.6)์„ ์‚ฌ์šฉํ•˜๋Š” Python 2.7์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ญ”๊ฐ€ ๋” ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

๋ฏธ๋ฆฌ pip ์™€ ํ•จ๊ป˜ backports.shutil_get_terminal_size ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด PR( https://github.com/paulgb/runipy/pull/125 )์„ ํ•จ๊ป˜ ๋„ฃ์–ด backports.shutil_get_terminal_size ์˜ค๋ฅ˜์™€ entrypoints ์˜ค๋ฅ˜๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ ์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋‘ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ ๋‘ ๋ฒˆ์งธ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ๋งคํŠธ๋ฆญ์Šค์˜ ์ฒ˜์Œ 3๊ฐœ CI ๋นŒ๋“œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด 3๊ฐ€์ง€ ๋ชจ๋‘ setuptools ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

setuptools์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜๋ฉด(ํ•ญ์ƒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ) ๋ฌธ์ œ ๊ฐ€

ํ•˜์ง€๋งŒ setuptools๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•˜๋Š”์ง€ 100% ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ƒˆ๋กœ์šด 2.7.3 virtualenv์— IPython(Jupyter ์•„๋‹˜)์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. IPython์ด ์„ค์น˜๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ pathlib2 ๋ฐ backports.shutil-get-terminal-size ์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์— ๋Œ€ํ•ด pip install ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ข…์†์„ฑ์ด ์ˆ˜์ •๋˜๊ณ  IPython์ด ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ pip freeze
nose==1.3.7
numpy==1.8.0
pyreadline==2.1
wsgiref==0.1.2

$ pip install ipython
[...]
Successfully installed ipython setuptools decorator pickleshare simplegeneric traitlets prompt-toolkit pygments pexpect ipython-genutils six wcwidth ptyprocess
Cleaning up...

$ pip freeze
Pygments==2.1.3
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
nose==1.3.7
numpy==1.8.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
pyreadline==2.1
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7
wsgiref==0.1.2

$ ipython
[...]
pkg_resources.DistributionNotFound: The 'pathlib2' distribution was not found and is required by ipython

$ pip install pathlib2

$ ipython
[...]
pkg_resources.DistributionNotFound: The 'backports.shutil_get_terminal_size' distribution was not found and is required by ipython

$ pip install backports.shutil_get_terminal_size

$ pip freeze
Pygments==2.1.3
backports.shutil-get-terminal-size==1.0.0
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
nose==1.3.7
numpy==1.8.0
pathlib2==2.1.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
pyreadline==2.1
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7
wsgiref==0.1.2

$ ipython
Python 2.7.3 (default, Aug 11 2016, 11:06:04) 
Type "copyright", "credits" or "license" for more information.

IPython 5.0.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]: 

pip --version ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‹น์‹ ์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ pip๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ ๋„ˆ๊ฐ€ ์˜ณ์•„. ๋‚˜๋Š” ํ• 1.4.1์— ์žˆ์—ˆ๋‹ค.

virtualenv๋ฅผ pip 8.1.2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  IPython 5.0.0์„ ๋ฌธ์ œ ์—†์ด ์„ค์น˜ํ•œ ํ›„ ์—ฐ์Šต์„ ๋ฐ˜๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

$ pip freeze
backports.shutil-get-terminal-size==1.0.0
decorator==4.0.10
ipython==5.0.0
ipython-genutils==0.1.0
numpy==1.8.0
pathlib2==2.1.0
pexpect==4.2.0
pickleshare==0.7.3
prompt-toolkit==1.0.5
ptyprocess==0.5.1
Pygments==2.1.3
simplegeneric==0.8.1
six==1.10.0
traitlets==4.2.2
wcwidth==0.1.7

OS X์—์„œ๋„ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

cternus<strong i="6">@astarael</strong>:~โŸซ ipython
Traceback (most recent call last):
  File "/usr/local/bin/ipython", line 7, in <module>
    from IPython import start_ipython
  File "/usr/local/lib/python2.7/site-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/usr/local/lib/python2.7/site-packages/IPython/core/application.py", line 25, in <module>
    from IPython.core import release, crashhandler
  File "/usr/local/lib/python2.7/site-packages/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "/usr/local/lib/python2.7/site-packages/IPython/core/ultratb.py", line 128, in <module>
    from IPython.utils.terminal import get_terminal_size
  File "/usr/local/lib/python2.7/site-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
cternus<strong i="7">@astarael</strong>:~โŸซ pip freeze | grep shutil
backports.shutil-get-terminal-size==1.0.0
cternus<strong i="8">@astarael</strong>:~โŸซ pip freeze | grep ipython
ipython==5.0.0
ipython-genutils==0.1.0
cternus<strong i="9">@astarael</strong>:~โŸซ python -m site
sys.path = [
    '/Users/cternus',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
    '/usr/local/lib/python2.7/site-packages',
    '/Library/Python/2.7/site-packages',
    '/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
]
USER_BASE: '/Users/cternus/Library/Python/2.7' (doesn't exist)
USER_SITE: '/Users/cternus/Library/Python/2.7/lib/python/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

๋‚˜๋Š” ์šด์—†์ด sudo pip install --upgrade --force-reinstall ipython (pip ๋ฐ setuptools ์žฌ์„ค์น˜)๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์กฐ์‚ฌํ•œ ๊ฒฐ๊ณผ backports.shutil_get_terminal_size ๋ชจ๋“ˆ ์ž์ฒด์— ๊ฒฐํ•จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

cternus<strong i="7">@astarael</strong>:/usr/local/lib/python2.7/site-packagesโŸซ python
Python 2.7.12 (default, Jun 29 2016, 14:05:02)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import backports
>>> dir(backports)
['__doc__', '__name__', '__path__']
>>> 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
>>>
cternus<strong i="8">@astarael</strong>:/usr/local/lib/python2.7/site-packagesโŸซ ls backports
__init__.py              functools_lru_cache.py   shutil_get_terminal_size
cternus<strong i="9">@astarael</strong>:/usr/local/lib/python2.7/site-packagesโŸซ ls backports/shutil_get_terminal_size
__init__.py           __init__.pyc          get_terminal_size.py  get_terminal_size.pyc
cternus<strong i="10">@astarael</strong>:/usr/local/lib/python2.7/site-packagesโŸซ

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ backports ๋ชจ๋“ˆ์€ ๋‘ ๊ฐ€์ง€(์•ฝ๊ฐ„ ๋‹ค๋ฅธ?!) ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

root<strong i="15">@astarael</strong>:/usr/local/lib/python2.7/site-packages/backportsโŸซ pip show --no-cache -vf backports.shutil-get-terminal-size
---
Metadata-Version: 2.0
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]
Installer: pip
License: MIT
Location: /usr/local/lib/python2.7/site-packages
Requires:
Classifiers:
  Development Status :: 5 - Production/Stable
  License :: OSI Approved :: MIT License
  Programming Language :: Python :: 2.6
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3.2
Files:
  backports.shutil_get_terminal_size-1.0.0.dist-info/DESCRIPTION.rst
  backports.shutil_get_terminal_size-1.0.0.dist-info/INSTALLER
  backports.shutil_get_terminal_size-1.0.0.dist-info/METADATA
  backports.shutil_get_terminal_size-1.0.0.dist-info/RECORD
  backports.shutil_get_terminal_size-1.0.0.dist-info/WHEEL
  backports.shutil_get_terminal_size-1.0.0.dist-info/metadata.json
  backports.shutil_get_terminal_size-1.0.0.dist-info/top_level.txt
  backports/__init__.py
  backports/__init__.pyc
  backports/shutil_get_terminal_size/__init__.py
  backports/shutil_get_terminal_size/__init__.pyc
  backports/shutil_get_terminal_size/get_terminal_size.py
  backports/shutil_get_terminal_size/get_terminal_size.pyc
  shutil_backports/__init__.py
  shutil_backports/__init__.pyc
  shutil_backports/get_terminal_size.py
  shutil_backports/get_terminal_size.pyc

๊ทธ๋ฆฌ๊ณ  shutil_backports.get_terminal_size๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก IPython/utils/terminal.py๋ฅผ ํŒจ์น˜ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์„ ์ด๋™.

์•ˆ๋…•ํ•˜์‹ญ๋‹ˆ๊นŒ,

virtualenv์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ jupyter๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ป๊ณ  ์žˆ์—ˆ๋‹ค
ImportError: shutil_get_terminal_size๋ผ๋Š” ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

_"pip freeze"๋Š” backports.shutil-get-terminal-size==1.0.0_์„ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ณด์—ฌ์ฃผ์—ˆ๋‹ค:

_pip ์„ค์น˜ --upgrade backports.shutil-get-terminal-size_
์š”๊ตฌ ์‚ฌํ•ญ์ด ์ด๋ฏธ ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค. /Library/Python/2.7/site-packages์˜ backports.shutil-get-terminal-size

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ๋“  ๋‚ด ๊ธ€๋กœ๋ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๊ณ  ๋‚ด venv์— ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์•ก์„ธ์Šคํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „์—ญ python์—์„œ backports.shutil-get-terminal-size๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‚ด veev์— ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ์„ค์น˜๋กœ 100% ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pip install --user --upgrade ipython==4.2

์ด ์„ค์น˜๋กœ 0%์˜ ์‹œ๊ฐ„์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pip install --user --upgrade ipython==4.1.1

--user ๋ช…๋ น์ค„ python ๋„๊ตฌ๋Š” ~/Library/Python/2.7/bin/ipython ๋Œ€์‹  /usr/local/bin

@AndrewHoos ์™€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋‘ ๋ช…๋ น ๋ชจ๋‘ ์ข…์†์„ฑ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. pip --version ์—์„œ ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ตœ์†Œ 8์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ setuptools์™€ pip๊ฐ€ ์ตœ์‹  ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

pip install --upgrade setuptools pip

conda ์™€ ํ•จ๊ป˜ ์„ค์น˜๋œ ๋…ธํŠธ๋ถ 4.2.2 ๋ฐ ipython 5.1.0์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด shutil_get_terminal_size ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

pip install backports.shutil_get_terminal_size
Requirement already satisfied (use --upgrade to upgrade): backports.shutil_get_terminal_size in /.../anaconda/lib/python2.7/site-packages

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜ python ์…ธ์—์„œ๋Š” import backports.shutil_get_terminal_size ๋ช…๋ น์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚˜๋Š” ์กฐ์žกํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. ์ด์ œ ipython์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค....

$ pip uninstall backports.shutil_get_terminal_size
Uninstalling backports.shutil-get-terminal-size-1.0.0:
  /home/pierre/Programmes/anaconda/lib/python2.7/site-packages/backports
  /home/pierre/Programmes/anaconda/lib/python2.7/site-packages/backports.shutil_get_terminal_size-1.0.0-py2.7.egg-info
Proceed (y/n)? y
  Successfully uninstalled backports.shutil-get-terminal-size-1.0.0
$ pip install backports.shutil_get_terminal_size
Collecting backports.shutil_get_terminal_size
  Downloading backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl
Installing collected packages: backports.shutil-get-terminal-size
Successfully installed backports.shutil-get-terminal-size-1.0.0

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

ImportError: shutil_get_terminal_size๋ผ๋Š” ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

IPython๊ณผ ๋ฐฑ ํฌํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์ฆ๊ฒ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” Jupyter์™€ ์นœ๊ตฌ๋“ค์ด ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๊ณ  shutil_get_terminal_size๊ฐ€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰ /Library/Python/2.7/site-packages/shutil_backports/

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ backports.functools_lru_cache๋ฅผ ๋กœ์ปฌ์— ์„ค์น˜ํ–ˆ๊ณ  ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ shutil_backports์˜ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฐจ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฌธ์ œ์ธ์ง€ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ls ~/Library/Python/2.7/lib/python/site-packages (OSX์—์„œ ํด๋” ๋ฐฑ ํฌํŠธ๊ฐ€ ๋ณด์ด๋ฉด ์•„๋งˆ๋„ ์ž˜๋ชป์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹œ์Šคํ…œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.์–ด๋Š ์ชฝ์ด๋“  ๋ฐฑ ํฌํŠธ๋ฅผ ํ˜ผํ•ฉ ๋ฐ ์ผ์น˜์‹œํ‚ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์™„์ „ํžˆ ์ž‘๋™ํ•˜๋ ค๋ฉด ์ „์—ญ ๋˜๋Š” ๋กœ์ปฌ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Debian Sid(Unstable)์˜ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์™„์ „ํžˆ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” pip๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋“ฑ. ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

# uname -a
Linux bunsen 4.7.0-1-amd64 #1 SMP Debian 4.7.2-1 (2016-08-28) x86_64 GNU/Linux
# pip2 --version
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)
# pip show ipython
---
Metadata-Version: 2.0
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
Installer: pip
License: BSD
Location: /usr/local/lib/python2.7/dist-packages
Requires: pickleshare, simplegeneric, traitlets, backports.shutil-get-terminal-size, decorator, pygments, prompt-toolkit, pexpect, pathlib2, setuptools
Classifiers:
  Framework :: IPython
  Intended Audience :: Developers
  Intended Audience :: Science/Research
  License :: OSI Approved :: BSD License
  Programming Language :: Python
  Programming Language :: Python :: 2
  Programming Language :: Python :: 2.7
  Programming Language :: Python :: 3
  Topic :: System :: Shells
Entry-points:
  [console_scripts]
  iptest = IPython.testing.iptestcontroller:main
  iptest2 = IPython.testing.iptestcontroller:main
  ipython = IPython:start_ipython
  ipython2 = IPython:start_ipython
  [pygments.lexers]
  ipython = IPython.lib.lexers:IPythonLexer
  ipython3 = IPython.lib.lexers:IPython3Lexer
  ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer

backports.shutil_get_terminal_size๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์„ค์น˜ํ•˜๋ฉด ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

OSX์—์„œ +1. ๋™์ผํ•œ ๋ฌธ์ œ - ์ „์—ญ ์ œ๊ฑฐ ๋ฐ virtualenv์— ์„ค์น˜๊ฐ€ ์ž‘๋™ํ•˜๊ณ  ๋กœ์ปฌ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

@Hiczeke ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค

๋งŽ์€ ์‹œ๋„ ๋์— ํ•ด๊ฒฐ๋œ ์ตœ์ข… ๋ช…๋ น์€ setuptools ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ถ”์ฒœํ•  ๊ฒƒ์ด๋‹ค:

  • debian ipython ๋ฐ python-backports-shutil-get-terminal-size ์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • pip๋กœ ์ œ๊ฑฐ: ipython , jupyter ๋ฐ backports.shutil_get_terminal_size
  • ์—…๊ทธ๋ ˆ์ด๋“œ pip ๋ฐ setuptools: pip install --upgrade setuptools pip`
  • pip๋กœ ipython(๋ฐ ๊ธฐํƒ€) ์žฌ์„ค์น˜: pip install ipython jupyter

๋‹ค์Œ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
pip ์ œ๊ฑฐ backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

@Paul-Richter @Hiczeke
์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
"backports.shutil_get_terminal_size"๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

pip install --upgrade --force-reinstall ipython

๋‚ด Mac์—์„œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฝค ํ˜ผ๋ž€ ์Šค๋Ÿฝ๋‹ค :

sudo pip uninstall backports.shutil_get_window_size
>>Cannot uninstall requirement backports.shutil-get-window-size, not installed

sudo pip install backports.shutil_get_window_size
>>Could not find a version that satisfies the requirement backports.shutil_get_window_size (from versions: )
>>No matching distribution found for backports.shutil_get_window_size

๋‹น์‹ ์„ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค, ์ด์•ˆ.

sudo pip ์ œ๊ฑฐ backports.shutil_get_ ํ„ฐ๋ฏธ๋„ _size

sudo pip install backports.shutil_get_ ํ„ฐ๋ฏธ๋„ _ํฌ๊ธฐ

2017๋…„ 1์›” 25์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 12:52 Ian Hincks [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ๊ฝค ํ˜ผ๋ž€ ์Šค๋Ÿฝ๋‹ค :

sudo pip ์ œ๊ฑฐ backports.shutil_get_window_size

์š”๊ตฌ ์‚ฌํ•ญ backports.shutil-get-window-size, ์„ค์น˜๋˜์ง€ ์•Š์Œ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

sudo pip install backports.shutil_get_window_size

backports.shutil_get_window_size ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๋ฒ„์ „์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๋ฒ„์ „์—์„œ: ).
backports.shutil_get_window_size์— ๋Œ€ํ•ด ์ผ์น˜ํ•˜๋Š” ๋ฐฐํฌํŒ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/ipython/ipython/issues/9656#issuecomment-275197674 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ATln0kDS_u6PaTk6Qunjc_oEtKCv_-cRks5rV5n7gaJpZM4I9MnS
.

@Paul-Richter ์•„, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

์ œ๊ฑฐ/์žฌ์„ค์น˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ ์œ„์˜ ์ฃผ์„์—์„œ @ternus ๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (linux์—์„œ) /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

@ihincks : ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด osx์—์„œ ์ œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ƒ

์˜ค๋Š˜ OS X 10.12.3์—์„œ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

pip install --upgrade pip setuptools
pip install --upgrade --force-reinstall ipython

๋‚˜๋Š” ์ด๊ฒƒ์ด ipython ์˜ค๋ฅ˜๋ผ๊ณ  ๋ฏฟ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ์‡„๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด IPython ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์–ด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์žฌ์„ค์น˜+ํฌ๋ง๋ณด๋‹ค ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค...

@pierre-haesig ๋‹น์‹ ์€ ๋‚˜์˜ ํ•˜๋ฃจ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@ihincks ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ๋งŒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ƒ๋ช…์˜ ์€์ธ์ž…๋‹ˆ๋‹ค :)

ihincks์˜ ์ˆ˜์ •์€ Windows 10์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
์ œ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ์˜ ์›์ธ์ด ์ž˜๋ชป๋œ ipython ๋ฒ„์ „์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

ls -lah /usr/local/bin/ipython*
-rwxr-xr-x  1 z  staff   247B Mar  5 15:16 /usr/local/bin/ipython
-rwxr-xr-x  1 z  staff   247B Mar  5 15:16 /usr/local/bin/ipython3

๋‚˜๋Š” python3 ๋ฒ„์ „์ด ์ „ํ˜€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‚ด ๋ฌธ์ œ๋Š” ํŒŒ์ด์ฌ์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

brew uninstall python
rm -rf /usr/local/lib/python2.7

python์„ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ  pip์˜ ๋ฒ„์ „๊ณผ ์œ„์น˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
pip2 install ipython

@ihincks

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์œ ์ผํ•œ ์ •๋‹ต์ž…๋‹ˆ๋‹ค.

sudo pip ์ œ๊ฑฐ backports.shutil_get_terminal_size
sudo pip install backports.shutil_get_terminal_size

Pip์€ sudo์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
pip์™€ ํ•จ๊ป˜ sudo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์†์ƒ๋ฉ๋‹ˆ๋‹ค.
๋ฌธ์ œ๊ฐ€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

sudo๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์‹œ์Šคํ…œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ๋””์—„

>

@ihincks FreeBSD์—์„œ๋Š” ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜๋งŒ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ฐธ๊ณ ๋กœ, ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ pip์—์„œ --ignore-installed ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ shutil_get_terminal_size ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ ์„ค์น˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

pip install --ignore-installed backports.shutil_get_terminal_size

@AllanDaemon ์˜ ์‘๋‹ต์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

๋น„์Šทํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์œผ๋ฉฐ backports.shutil_get_terminal_size๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

pip ์ œ๊ฑฐ backports.shutil_get_terminal_size
pip install backports.shutil_get_terminal_size

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
์œ„์˜ ๋งŽ์€ ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•œ ํ›„ ๋งˆ์นจ๋‚ด ๋ฌธ์ œ๊ฐ€ $PATH ์„ค์ •์œผ๋กœ ์ธํ•œ ๊ฒƒ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด์ „์— pip install --user ์˜ต์…˜์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— /home/jin/.local/lib/python2.7 ๊ฐ€ backports ์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์ด ์žˆ๋Š” $PATH์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
.local/lib/python2.7 ํด๋”๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

$PATH์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๊ฐ„๋‹จํžˆ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import sys
print sys.path

์ด ๋ฌธ์ œ๋Š” "์‹œ์Šคํ…œ" ๋ฐ "์‚ฌ์šฉ์ž" ์œ„์น˜ ๋ชจ๋‘์— "๋ฐฑํฌํŠธ"๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚ด macOS์—์„œ ์‹œ์Šคํ…œ์— shutil_get_terminal_size๋ฅผ ์„ค์น˜ํ–ˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ํ™ˆ์— ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์šฉ์ž ํด๋”๊ฐ€ ์šฐ์„ ํ•˜๋ฉฐ ์‹œ์Šคํ…œ์—์„œ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--user๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  python ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•ฉ๋‹ˆ๋‹ค.
๋ง‰ํžŒ ๊ฒฝ์šฐ --user๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค.
pip install --ignore-installed backports.shutil_get_terminal_size --user
๋งค๋ฒˆ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ผ๋ถ€ ์ง„๋‹จ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

backports ๋Š” '๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€'์—ฌ์•ผ ํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋‹ค๋ฅธ ์œ„์น˜์— ํ•˜์œ„ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™๊ณ  ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋กœ์ปฌ์—์„œ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์œ„ํ•ด ์žฌํ˜„ํ•  ์ˆ˜ ์—†๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ํ†ตํ•ด ๋””๋ฒ„๊ทธํ•˜๋ ค๋Š” ๋‚˜์˜ ์‹œ๋„๋Š” ๋‹จ์ง€ ์–ด๋ฆฌ๋‘ฅ์ ˆํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

@takluyver https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843898 ๋ณด์…จ๋‚˜์š”? ์ตœ๊ทผ 2~3๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์ด ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ๊ณผ ๋‹ค์†Œ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. backports ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๋ฅผ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์žˆ์ง€๋งŒ ๋ฌด์—‡์„ ๋˜๋Š” โ€‹โ€‹์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ์€ pip ์„ค์น˜ ํŒจํ‚ค์ง€๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋”๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ •๋‹นํ•˜๊ฒŒ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” https://github.com/chrippa/backports.shutil_get_terminal_size/issues/9#issuecomment -279021331์— ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ณ  pip๋ฅผ ํ†ตํ•ด ํœ  ๋Œ€ ๋น„ ํœ (๋น„ ๋ฐ”์ด๋„ˆ๋ฆฌ) ์„ค์น˜ ๊ฐ„์˜ ์ฐจ์ด์ ์„ ์ฐพ๋Š” ๋ฐ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ ๋ฒ„์ „์˜ IPython์— ๋Œ€ํ•œ ๋Œ€์ฒด๋กœ ๋ฒค๋”๋ง์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด CPython์˜ Shutil๋กœ ๋ฐฑํฌํŠธ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด CPython์˜ Shutil๋กœ ๋ฐฑํฌํŠธ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์•„๋งˆ๋„ ์•„๋‹ˆ์˜ค, ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ IPython 6.0/master์—์„œ backport ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  CPython ๋งˆ๊ตฌ๊ฐ„์— ์žˆ์œผ๋ฉฐ, ๋ฌธ์ œ๋Š” 2.7์—์„œ backport ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ‘œ์ค€ CPython 2.7์— ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•Œ์•˜์–ด์š”. @Carreau๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ผ์‹œ์ ์ธ ๋ฌธ์ œ์ผ ๋ฟ์ด๋ผ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค.

์ „์—ญ ์„ค์น˜๋ฅผ ์‚ญ์ œํ•˜๊ณ  virtualenv์—์„œ ์ œ๊ฑฐํ•˜๊ณ  virtualenv์—์„œ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

conda config --add channels conda-forge
conda install backports.shutil_get_terminal_size

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”
ipython2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Ubuntu 17.10์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
python3์— ๋ฌธ์ œ ์—†์Œ

FIX: sudo -H pip install --ignore-installed backports.shutil_get_terminal_size ์„ค์น˜

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 17.10
Release:    17.10
Codename:   artful

$ python --version
Python 2.7.14

$ python3 --version
Python 3.6.3

$ pip show ipython
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
License: BSD
Location: /usr/lib/python2.7/dist-packages
Requires: backports.shutil-get-terminal-size, pathlib2, pexpect

$ pip3 show ipython
Name: ipython
Version: 5.1.0
Summary: IPython: Productive Interactive Computing
Home-page: http://ipython.org
Author: The IPython Development Team
Author-email: [email protected]
License: BSD
Location: /usr/lib/python3/dist-packages
Requires: pexpect

$ 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

$ apt-cache show python-ipython
Package: python-ipython
Architecture: all
Version: 5.1.0-3
Priority: optional
Section: universe/python
Source: ipython
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian Python Modules Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1864
Depends: python-decorator, python-pexpect, python-pickleshare, python-pkg-resources, python-prompt-toolkit, python-pygments, python-simplegeneric, python-traitlets, python:any (<< 2.8), python:any (>= 2.7.5-5~), python-backports-shutil-get-terminal-size, python-pathlib2
Breaks: ipython (<< 4)
Replaces: ipython (<< 4)
Filename: pool/universe/i/ipython/python-ipython_5.1.0-3_all.deb
Size: 375048
MD5sum: 7ae68256eb7c6183634ea3680ad4449d
SHA1: 7e2916b5e661793dcb55e86404de5cd1f0d19d8b
SHA256: 0664f1d3c5543cc3ba4db4fcd8bf4526de714e3f35687b49052fad7831cbdee3
Homepage: https://github.com/ipython/ipython
Description-en: Enhanced interactive Python shell (Python 2 version)
 IPython can be used as a replacement for the standard Python shell,
 or it can be used as a complete working environment for scientific
 computing (like Matlab or Mathematica) when paired with the standard
 Python scientific and numerical tools. It supports dynamic object
 introspections, numbered input/output prompts, a macro system,
 session logging, session restoring, complete system shell access,
 verbose and colored traceback reports, auto-parentheses, auto-quoting,
 and is embeddable in other Python programs.
 .
 This package contains the backend terminal shell for Python 2: for
 the actual frontend install ipython.
Description-md5: 713480d81c0c64f1b3a9c4c9350ef96c

$ apt-cache show python3-ipython
Package: python3-ipython
Architecture: all
Version: 5.1.0-3
Priority: optional
Section: universe/python
Source: ipython
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Debian Python Modules Team <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1864
Depends: python3-decorator, python3-pexpect, python3-pickleshare, python3-pkg-resources, python3-prompt-toolkit, python3-pygments, python3-simplegeneric, python3-traitlets, python3:any (>= 3.3.2-2~), python-pexpect
Breaks: ipython3 (<< 4)
Replaces: ipython3 (<< 4)
Filename: pool/universe/i/ipython/python3-ipython_5.1.0-3_all.deb
Size: 375114
MD5sum: c0585bf56c9fbcbb73aa45d25b8fbe14
SHA1: c7118d1050f50723d614a3060ad6d8d31a96e73c
SHA256: 293217ee356c2c2623efce3fc391b1876a38585b0ae7462b2a8a0d3f3424ec86
Homepage: https://github.com/ipython/ipython
Description-en: Enhanced interactive Python shell (Python 3 version)
 IPython can be used as a replacement for the standard Python shell,
 or it can be used as a complete working environment for scientific
 computing (like Matlab or Mathematica) when paired with the standard
 Python scientific and numerical tools. It supports dynamic object
 introspections, numbered input/output prompts, a macro system,
 session logging, session restoring, complete system shell access,
 verbose and colored traceback reports, auto-parentheses, auto-quoting,
 and is embeddable in other Python programs.
 .
 This package contains the backend terminal shell for Python 3: for
 the actual frontend install ipython.
Description-md5: 8182f91eff6e0e148e574a20d31e0f51

@nicola-lunghi ์ œ๋ฐœ sudo pip ์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์กฐ์–ธํ•˜์ง€ ๋งˆ์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ์žฅ๊ธฐ์ ์œผ๋กœ ์‹œ์Šคํ…œ์ด ์ด์ƒํ•˜๊ฒŒ ๋ง๊ฐ€์งˆ ๋ฟ์ž…๋‹ˆ๋‹ค. Pip๋Š” ์ผ๋ถ€ ํŒŒ์ผ์— ๋Œ€ํ•ด ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์™€ ์‹ธ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๋ฐค์— ๊นจ์šฐ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์‚ฐํ™”ํƒ„์†Œ ์•Œ๋žŒ์—์„œ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํžˆํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@Carreau ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
์ง‘์— ๋ถˆ์„ ๋„๊ณ  ๋‹ต๋ณ€์„ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : "heather" -> deb ์ข…์†์„ฑ์„ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

๊ฐ€์žฅ ์‰ฌ์šด ์ˆ˜์ •์€ ์•„๋งˆ๋„ pip install --user ipython ๋กœ ์ตœ์‹  ๋ฒ„์ „์˜ IPython์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( --user ํ”Œ๋ž˜๊ทธ๋Š” sudo๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ IPython์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ๋ฐ๋น„์•ˆ ํŒจํ‚ค์ง€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†์œผ๋ฉฐ apt๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž๋Š” ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ IPython์„ ์–ป์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ Cygwin ๋ฐ python2์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์†”๋ฃจ์…˜์€ Cygwin setup.exe(๋˜๋Š” apt-cyg utls ์ค‘ ํ•˜๋‚˜)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  python2-backports.shutil_get_terminal_size ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ข…์†์„ฑ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ipython3์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

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