Ipython: virtualenv ๋‚ด์— ์„ค์น˜๋œ IPython. ๊ฒฝ๊ณ  "virtualtenv ๋‚ด๋ถ€์— IPython์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค"

์— ๋งŒ๋“  2013๋…„ 03์›” 14์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ipython/ipython

์ตœ์‹  Python 2.7์—์„œ ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์˜ virtualenv๋กœ ์ƒ์„ฑํ•œ virtualenv ๋‚ด์— ์ตœ์‹  ์•ˆ์ • ๋ฒ„์ „์˜ IPython์„ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ virtualenv ๋‚ด๋ถ€์— IPython์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์˜์‹ฌ์Šค๋Ÿฌ์šด ์ ์ด ์žˆ์œผ๋ฉด virtualenv๋ฅผ ๋งŒ๋“ค๊ณ  source [virtenv]/bin/activate ๋กœ ํ™œ์„ฑํ™”ํ•œ ๋‹ค์Œ pip install ipython ๋กœ ipython์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ipython์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด which ipython ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋‚ด์—์„œ ipython ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ipython ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด WARNING message ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv .

๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

needs-info

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

์ˆ˜์ •์ด hash -r ๋งŒํผ ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

IPython ๋‚ด๋ถ€์—์„œ ๋‹ค์Œ์„ ์ธ์‡„ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

import os, sys, IPython
print os.environ['VIRTUAL_ENV']
print sys.executable
print IPython.__file__
print sys.path

@minrk๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ IPython์„ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋‚ด ํ”„๋กฌํ”„ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
([name of virtual env]) [my regular prompt]

๊ทธ๋Ÿฐ ๋‹ค์Œ IPython์— ์žˆ์œผ๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

print os.environ['VIRTUAL_ENV']
# correctly prints the path to the environment 

print sys.executable
# Prints the external path to Python (?)

print IPython.__file__
# Prints the external path to the ipython installation's __init__.pyc (?)

print sys.path
# Prints the path to the site-packages folder from the virtualenv at the top.
# Then the bin path of the Python's external installation (?)
# Then some paths to individual packages from the external installation (?)
# Then the paths to individual packages from the virtualenv (and it misses the virtualenv's installation of IPython, ?)
# Then a few more paths to individual packages of the external installation (?)
# Finally the IPython from the external installation (?)

IPython ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๋ฉด ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
([name of virtual env]) [my regular prompt]

๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด, ๋‚ด๊ฐ€ ์™ธ๋ถ€ ์„ค์น˜ _๋ผ๊ณ  ๋งํ•  ๋•Œ ๋‚˜๋Š” virtualenv ๋‚ด์—์„œ *๊ฐ€ ์•„๋‹ˆ๊ณ  ์‹œ์Šคํ…œ ์„ค์น˜์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ $PATH ๋ฐ $LD_LIBRARY_PATH ์˜ ๋งจ ์œ„์— ํฌํ•จ๋œ ์„ค์น˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋‚ด๊ฐ€ ๋ˆ„๋ฝ๋œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ  ์ด๋Š” ๋‚ด virtualenv์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  PATH ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ํฌํ•จํ•˜๋ ค๋Š” ์™ธ๋ถ€ ์„ค์น˜๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ๋„๋ก IPython์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. PATH ๋ฐ LD_LIBRARY_PATH ?

head $(which ipython) ๋กœ ๋ฌด์—‡์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•˜๋‚˜ ๋”: sys.argv

sys.executable์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ Python ํŒจํ‚ค์ง€๊ฐ€ ๋กœ๋“œ๋˜๊ธฐ ์ „์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •ํ™•ํžˆ ipython ์‹œ์Šคํ…œ์ด ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ์‹œ์Šคํ…œ์ด ์•„๋‹Œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค(์˜ˆ: ํ™˜๊ฒฝ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ /usr/bin/ipython ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ, ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ์ž˜๋ชป ๋™์ž‘ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด์•ผ ํ•จ).

์ˆ˜์ •์ด hash -r ๋งŒํผ ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@minrk๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. head $(which ipython) ๋ฐ˜ํ™˜:

#!/path_to_my_virtual_env/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.13.1','console_scripts','ipython'
__requires__ = 'ipython==0.13.1'
import sys
from pkg_resources import load_entry_point

sys.exit(
   load_entry_point('ipython==0.13.1', 'console_scripts', 'ipython')()
)

๊ทธ๋ฆฌ๊ณ  print sys.argv ๋Š” ์™ธ๋ถ€ Python ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ hash -r ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

์ด์ œ ๋‹ค๋ฅธ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
WARNING: IPython History requires SQLite, your history will not be saved

๋‚ด virtualenv๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์™ธ๋ถ€ ์„ค์น˜์—์„œ ipython์„ ์‹คํ–‰ํ•˜๋ฉด ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ํ•œ ์ผ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

  1. ipython ์„ ์‹คํ–‰ํ•˜๊ณ  ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
  2. ํ™˜๊ฒฝ์— ipython์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๋™์ผํ•œ ์…ธ ์„ธ์…˜์—์„œ ipython์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๊ด€๋ จ ์ •๋ณด์™€ hash -r ์ด ์ˆ˜์ •ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

  • ๋ช…๋ น์˜ ๊ฒฝ๋กœ๋Š” ํ˜ธ์ถœํ•œ ํ›„์— ์บ์‹œ๋˜๋ฏ€๋กœ ์‹ค์ œ๋กœ ์‰˜ ์„ธ์…˜์—์„œ ์ฃผ์–ด์ง„ ๋ช…๋ น์— ๋Œ€ํ•œ PATH๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฒ€์ƒ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • which ๋Š” ์ด ์บ์‹œ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ which ipython ๋Š” ์‰˜ ์„ธ์…˜์—์„œ ์ด์ „์— ํ˜ธ์ถœ๋œ ๊ฒฝ์šฐ ํ˜ธ์ถœ๋  ipython ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  • hash -r ๋Š” ๋‹จ์ˆœํžˆ ์ด ์บ์‹œ๋ฅผ ์žฌ์„ค์ •ํ•˜์—ฌ which ๊ฐ€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •ํ™•ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

sqlite์˜ ๊ฒฝ์šฐ virtualenv์— ์–ด๋–ค โ€‹โ€‹Python์„ ์‚ฌ์šฉํ•˜์…จ์Šต๋‹ˆ๊นŒ?

@minrk ๋„ค ๋งž์Šต๋‹ˆ๋‹ค! ๊ฐ์‚ฌ ํ•ด์š”. ํŒŒ์ด์ฌ 2.7 x64๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค

ํŒŒ์ด์ฌ์„ ์ง์ ‘ ๋งŒ๋“œ์…จ๋‚˜์š”? ๊ทธ๋ ‡๋‹ค๋ฉด Python์„ ์ปดํŒŒ์ผํ•  ๋•Œ libsqlite๊ฐ€ ์กด์žฌํ•˜๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@minrk๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. libsqlite ๋Š” ์™ธ๋ถ€ IPython์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค PATH ์ƒ๋‹จ์— ์™ธ๋ถ€ ์„ค์น˜๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด LD_LIBRARY_PATH ). ์ฆ‰, ์™ธ๋ถ€ IPython์ด ์‹œ์Šคํ…œ ์„ค์น˜์—์„œ libsqlite ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์•„๋งˆ๋„ LD_LIBRARY_PATH ์˜ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์—์„œ). ๊ทธ๊ฒŒ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

์–ด๋Š ์ชฝ์ด๋“ , ๋ชจ๋“  ๋„์›€์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์‹ ๊ณ ํ•œ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ‹ฐ์ผ“์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ—ค๋” ๋“ฑ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (ํŒŒ์ด์ฌ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ ๋Š” ๊ณ ์น  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค)

.py ํ”„๋กœํ•„ ์‹คํ–‰ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋…ธํŠธ๋ถ์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ ์‹คํ–‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค!
๊ทธ๋Ÿผ ,์ฐพ์•„์š”!
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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