Pipenv: ์ž ๊ธˆ์ด ๋Š๋ฆผ(์ค‘๋ณต ๋‹ค์šด๋กœ๋“œ ์ˆ˜ํ–‰)

์— ๋งŒ๋“  2018๋…„ 05์›” 31์ผ  ยท  63์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pipenv

๋‚ด ์„ค์น˜์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ชจ๋“  ์ปดํ“จํ„ฐ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค... ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€/์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ–ˆ๋Š”๋ฐ ์ž ๊ธˆ์— ๋ช‡ ๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Locking [packages] dependenciesโ€ฆ

$ python -m pipenv.help ์ถœ๋ ฅ

Pipenv ๋ฒ„์ „: '2018.05.18'

Pipenv ์œ„์น˜: '/Users/colllin/miniconda3/lib/python3.6/site-packages/pipenv'

ํŒŒ์ด์ฌ ์œ„์น˜: '/Users/colllin/miniconda3/bin/python'

PATH ๊ธฐํƒ€ Python ์„ค์น˜:

  • 2.7 : /usr/bin/python2.7
  • 2.7 : /usr/bin/python2.7
  • 3.6 : /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m
  • 3.6 : /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
  • 3.6 : /Users/colllin/miniconda3/bin/python3.6
  • 3.6 : /Users/colllin/.pyenv/shims/python3.6
  • 3.6 : /usr/local/bin/python3.6

  • 3.6.3 : /Users/colllin/miniconda3/bin/python

  • 3.6.3 : /Users/colllin/.pyenv/shims/python
  • 2.7.10 : /usr/bin/python
  • 3.6.4 : /Library/Frameworks/Python.framework/Versions/3.6/bin/python3
  • 3.6.3 : /Users/colllin/miniconda3/bin/python3
  • 3.6.4 : /Users/colllin/.pyenv/shims/python3
  • 3.6.4 : /usr/local/bin/python3

PEP 508 ์ •๋ณด:

{'implementation_name': 'cpython',
 'implementation_version': '3.6.3',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '17.5.0',
 'platform_system': 'Darwin',
 'platform_version': 'Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST '
                     '2018; root:xnu-4570.51.1~1/RELEASE_X86_64',
 'python_full_version': '3.6.3',
 'python_version': '3.6',
 'sys_platform': 'darwin'}

์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜:

  • TERM_PROGRAM
  • NVM_CD_FLAGS
  • TERM
  • SHELL
  • TMPDIR
  • Apple_PubSub_Socket_Render
  • TERM_PROGRAM_VERSION
  • TERM_SESSION_ID
  • NVM_DIR
  • USER
  • SSH_AUTH_SOCK
  • PYENV_VIRTUALENV_INIT
  • PATH
  • PWD
  • LANG
  • XPC_FLAGS
  • PS1
  • XPC_SERVICE_NAME
  • PYENV_SHELL
  • HOME
  • SHLVL
  • DRAM_ROOT
  • LOGNAME
  • NVM_BIN
  • SECURITYSESSIONID
  • _
  • __CF_USER_TEXT_ENCODING
  • PYTHONDONTWRITEBYTECODE
  • PIP_PYTHON_PATH

Pipenv ์ „์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜:

๋””๋ฒ„๊ทธ ์ „์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜:

  • PATH : /Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/colllin/miniconda3/bin:/Users/colllin/.pyenv/plugins/pyenv-virtualenv/shims:/Users/colllin/.pyenv/shims:/Users/colllin/.pyenv/bin:/Users/colllin/.nvm/versions/node/v8.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • SHELL : /bin/bash
  • LANG : en_US.UTF-8
  • PWD : /Users/.../folder

Pipfile ('/Users/.../Pipfile')์˜ ๋‚ด์šฉ:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
gym-retro = "*"

[dev-packages]

[requires]
python_version = "3.6"

Dependency Resolution Future Performance

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

lock ์ด ์ •๋ง ๋Š๋ฆฌ๊ณ  files.pythonhosted.org ์—์„œ scipy flask ๋“ฑ์— ์˜์กดํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ 800MB๊ฐ€ ๋„˜๋Š” ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ files.pythonhosted.org ๋Œ€ํ•œ ์š”์ฒญ์„ ์Šค๋‹ˆํ•‘ํ–ˆ๋Š”๋ฐ pip ๋˜๋Š” pipenv๊ฐ€ ์™„์ „ํžˆ ๋ถˆํ•„์š”ํ•œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์–ด lock ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋Š๋ ค์กŒ์Šต๋‹ˆ๋‹ค.

1535625096148

์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์ผํ•œ ๋ฒ„์ „ numpy ์ด ์ „์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Mac์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ Windows/Linux์šฉ ํœ ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์„ค์ •:

$ pipenv --version
pipenv, version 2018.05.18

$ pip -V
pip 18.0 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)

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

@colllin pip search ์™€ ๊ฐ™์ด ์„œ๋ฒ„์— ์ ‘์†ํ•˜๋Š” pip ๋ช…๋ น์–ด๋„ ๋Š๋ฆฐ์ง€ ํ™•์ธํ•˜์…จ๋‚˜์š”?

๋น„์Šทํ•œ ๋™์ž‘์ด ๋ณด์ด์ง€๋งŒ ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ด๋ฉฐ ๋„คํŠธ์›Œํฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ์ง์žฅ ๋„คํŠธ์›Œํฌ์—์„œ pypi.org์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฌ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ™ˆ ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ๋น ๋ฆ…๋‹ˆ๋‹ค. ์ž ๊ธˆ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŽ์€ pip ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋Š๋ฆฐ ์•ก์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ๋งŽ์ด ๋Š๋ฆฌ๊ฒŒ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ํ•ด๊ฒฐํ•ด์•ผ ํ•  ํ•˜์œ„ ์ข…์†์„ฑ์ด ๋งŽ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์ƒ์„ฑ๋œ ํ™˜๊ฒฝ์˜ ํฌ๊ธฐ(์˜ˆ: pipfile์˜ ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€ ์ˆ˜ ๋ฐ pip list ๋ฐ˜ํ™˜๋œ ํŒจํ‚ค์ง€ ์ˆ˜) ํ™˜๊ฒฝ์ด ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๋˜๋ฉด)?

์‚ฌ๋ ค๊นŠ์€ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

pip search ๋Š” ํŠน๋ณ„ํžˆ ๋น ๋ฅด๊ฑฐ๋‚˜ ๋Š๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ~1์ดˆ?

๋„๋ฉ”์ธ ์ง€์‹์ด ๋ถ€์กฑํ•œ ์ €๋ฅผ ์šฉ์„œํ•ด ์ฃผ์‹ญ์‹œ์˜ค. PIP ๊ฒ€์ƒ‰์ด ์ •๋ง๋กœ ํ•„์š”ํ•œ๊ฐ€์š”? ๊ทธ๋ƒฅ ๋‹ค ์„ค์น˜ํ•œ๊ฑฐ ์•„๋‹˜? ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๊ธฐ๋กํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”? ๋˜๋Š” ... ์–ด์จŒ๋“  ์ž ๊ธˆ ํŒŒ์ผ์˜ ์กด์žฌ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๋˜๋Š” ์ด์ „์— ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ์ƒ๊ฐ์— ... pipenv๋Š” ํ›„๋“œ ์•„๋ž˜์—์„œ pip๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ธ”๋ž™๋ฐ•์Šค์ด๊ณ  ~pip search~ ์ž์ฒด pip ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฌด์—‡์ด ์„ค์น˜๋˜์—ˆ๋Š”์ง€/์„ค์น˜๋  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ์ด ํŠน์ • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” 1๊ฐœ์˜ ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€์™€ pip list ์—์„œ ๋ฐ˜ํ™˜๋œ ~65๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ์ง€ ๋ชปํ•˜์ง€๋งŒ ์ž ๊ธˆ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์ด ํ•ด๊ฒฐ๋˜๊ณ  ๊ณ ์ •๋˜๋Š” ๋‹จ๊ณ„๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ~65๊ฐœ์˜ ์ข…์†์„ฑ์ด ์žˆ๋Š” ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ž ๊ธˆ ๋‹จ๊ณ„ ๋™์•ˆ ํ•ด๋‹น ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ค์ง€์˜ ๋ชจ๋“  ์ข…์†์„ฑ์ด (์žฌ๊ท€์ ์œผ๋กœ) ๋ฐœ๊ฒฌ๋˜๊ณ  ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  (์•„๋งˆ๋„) ๋Œ€๋žต์ ์ธ ์ˆœ์„œ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž ๊ธˆ ํŒŒ์ผ์ด ์—†๋Š” Pipfile์—์„œ pip installํ•˜๋ฉด ํŒจํ‚ค์ง€๋ฅผ venv์— ์„ค์น˜ ํ•˜๊ธฐ ์ „์— ์ž ๊ธˆ ๋‹จ๊ณ„ --deploy ๊ฒƒ์œผ๋กœ, ๋น ๋ฅธ ๊ฒƒ ์˜ต์…˜์„ --no-lock ์˜ต์…˜; ์ „์ž์˜ ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์ด ์˜ค๋ž˜๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํ›„์ž์˜ ๊ฒฝ์šฐ ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€(์„ ์–ธ๋œ ํ™˜๊ฒฝ)์™€ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ์‹ค์ œ ์„ค์น˜๋œ(์ž ๊ธด) ํ™˜๊ฒฝ์˜ ๋…ผ๋ฆฌ์  ๋ถ„ํ• ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

pipenv๊ฐ€ ํ›„๋“œ ์•„๋ž˜์—์„œ pip๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€ - ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค - ์—ฌ์ „ํžˆ pypi ์„œ๋ฒ„์—์„œ ํŒจํ‚ค์ง€ ์ข…์†์„ฑ ๋“ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋ฏ€๋กœ pip ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ๋‚ด ์งˆ๋ฌธ์€ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฑฐ๋‚˜ pypi ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ๋Š๋ฆฌ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ pipenv๊ฐ€ ๊ทธ ์ผ์„ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ์ง์ ‘์ ์ธ ์•”์‹œ๋ณด๋‹ค ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด ์‹คํ—˜์€ pipenv์—์„œ ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ์ž ๊ทธ๊ณ  pip install -r requirements.txt ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ํ™˜๊ฒฝ์— ์š”๊ตฌ ์‚ฌํ•ญ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋‹จ๊ณ„์—์„œ ๊ฝค ๋น„์Šทํ•œ ์ผ์„ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ค‘๋ณต ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์–ด๋”˜๊ฐ€์— ์„ค์ •ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์ฆ๋ช…ํ•˜๋ฉด ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ pip install -r requirements.txt ๋ฅผ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์ž ๊ทธ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต ํฌ์ธํŠธ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Pip์€ ์‹ค์ œ ์˜๋ฏธ์—์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ๋ฆฌ์กธ๋ฒ„๋ฅผ _๊ฐ€์ ธ ์žˆ์ง€_ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. pip๊ฐ€ requirements.txt ์„ค์น˜ํ•  ๋•Œ ๋‹ค์Œ ๊ธฐ๋ณธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • ๋‚˜์—ด๋œ ์ฒซ ๋ฒˆ์งธ ์š”๊ตฌ ์‚ฌํ•ญ ์ฐพ๊ธฐ

    • ๋ชจ๋“  ์ข…์†์„ฑ ์ฐพ๊ธฐ

    • ๋ชจ๋‘ ์„ค์น˜

  • ๋‚˜์—ด๋œ ๋‘ ๋ฒˆ์งธ ์š”๊ตฌ ์‚ฌํ•ญ ์ฐพ๊ธฐ

    • ๋ชจ๋“  ์ข…์†์„ฑ ์ฐพ๊ธฐ

    • ๋ชจ๋‘ ์„ค์น˜

  • ๋‚˜์—ด๋œ ์„ธ ๋ฒˆ์งธ ์š”๊ตฌ ์‚ฌํ•ญ ์ฐพ๊ธฐ

    • ๋ชจ๋“  ์ข…์†์„ฑ ์ฐพ๊ธฐ

    • ๋ชจ๋‘ ์„ค์น˜

์ด๊ฒƒ์€ _package 1_์˜ ์ข…์†์„ฑ์ด _package 3_์˜ ์ข…์†์„ฑ๊ณผ ์ถฉ๋Œํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ pip๊ฐ€ ์‹ค์ œ๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฝค ๋น ๋ฅธ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

Pipenv๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์ „์— ์ง€์ •ํ•œ ์ข…์†์„ฑ์˜ _๋ชจ๋“ _์„ ์ถฉ์กฑ์‹œํ‚ค๋ ค๋Š” ํ•ด์ƒ๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ๋„ ์ „์— ์—ฌ๋Ÿฌ๋ถ„์˜ ํ™˜๊ฒฝ์ด ๊ถ๊ทน์ ์œผ๋กœ ์–ด๋–ค ๋ชจ์Šต์ด์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์šด๋กœ๋“œ, ๋น„๊ต ๋ฐ โ€‹โ€‹์ข…์ข… _building_ ํŒจํ‚ค์ง€๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์™œ ์ด๊ฒƒ์ด ํŒŒ์ด์ฌ์˜ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค).

ํ•ด๋‹น ํ•ด๊ฒฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ ๋‹จ๊ณ„๋Š” ํ•ด์‹œ๋ฅผ ์š”๊ตฌํ•˜๋ฏ€๋กœ ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋” ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์€ ํ›„ ํ•ด์‹œํ•˜๊ณ  PyPI๊ฐ€ ์˜ˆ์ƒํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•œ ํ•ด์‹œ์™€ ๋น„๊ตํ•˜๊ณ  ํ•ด๋‹น ํ•ด์‹œ๋ฅผ ์ž ๊ธˆ ํŒŒ์ผ์— ์ €์žฅํ•˜์—ฌ ๋ฏธ๋ž˜์— ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€๊ฐ€ ์›๋ž˜ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ ํŒจํ‚ค์ง€์ž„์„ ๊ณ„์•ฝ์ƒ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

Pip ๊ฒ€์ƒ‰์€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋นˆ์•ฝํ•œ ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค pip์˜ ๋„๊ตฌ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋นˆ์•ฝํ•œ ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐ ๋ถ€๋ถ„์— ๋Œ€ํ•ด pip๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•จ๊ป˜ ๊ตฌ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์ข…์†์„ฑ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ฐ ๊ทธ๋ž˜ํ”„๋Š” pipenv์˜ ๊ฐ’์ด ์ถ”๊ฐ€๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ช…ํ™•ํžˆ ํ•  ์ ์€ ์ „์ฒด ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ์„ค์น˜ ์ˆœ์„œ๊ฐ€ ๋” ์ด์ƒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›„๋“œ ์•„๋ž˜์—์„œ ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ --no-deps ๋ฅผ ๋ชจ๋“  ์„ค์น˜์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ž‘์€ ๋ถ€์ˆ˜์ ์œผ๋กœ, pip ๊ฒ€์ƒ‰์€ ํ˜„์žฌ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” XMLRPC ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋Š” ์œ ์ผํ•œ pip ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์บ์‹œํ•  ์ˆ˜ ์—†๊ณ  ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…๋ณด๋‹ค ํ•ญ์ƒ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

๋‚ด ์ปดํ“จํ„ฐ์—์„œ numpy๋ฅผ ์ž ๊ทธ๋Š” ๋ฐ(๋‹ค๋ฅธ ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ) 220์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค(์•„๋ž˜ ์ฐธ์กฐ). ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์€ 200MB ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐ ์†Œ๋น„๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด numpy ์†Œ์Šค์— 4MB๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ƒ๋‹นํžˆ ๋‹นํ˜น์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ๊ทธ๊ฒƒ์ด ์ฆ‰๊ฐ์ ์ผ์ง€๋ผ๋„, ์—ฌ์ „ํžˆ 25์ดˆ์˜ ์‹ค์ œ ์ฒ˜๋ฆฌ๊ฐ€ ์žˆ๊ณ , ๊ทธ๋งˆ์ €๋„ ๋ช‡ ๊ฐœ์˜ ํ•ด์‹œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ์—๋Š” ๊ณผ๋„ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. Pipenv.lock์„ ์‚ญ์ œํ•œ ํ›„์—๋„ ํ›„์† ์ž ๊ธˆ์—๋Š” 5์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

11:46 ~/Co/Ce/torchdft time pipenv install
Creating a virtualenv for this projectโ€ฆ
Using /usr/local/Cellar/pipenv/2018.5.18/libexec/bin/python3.6 (3.6.5) to create virtualenvโ€ฆ
โ ‹Already using interpreter /usr/local/Cellar/pipenv/2018.5.18/libexec/bin/python3.6
Using real prefix '/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/hermann/.local/share/virtualenvs/torchdft-mABBUp_t/bin/python3.6
Also creating executable in /Users/hermann/.local/share/virtualenvs/torchdft-mABBUp_t/bin/python
Installing setuptools, pip, wheel...done.

Virtualenv location: /Users/hermann/.local/share/virtualenvs/torchdft-mABBUp_t
Creating a Pipfile for this projectโ€ฆ
Pipfile.lock not found, creatingโ€ฆ
Locking [dev-packages] dependenciesโ€ฆ
Locking [packages] dependenciesโ€ฆ
Updated Pipfile.lock (ca72e7)!
Installing dependencies from Pipfile.lock (ca72e7)โ€ฆ
  ๐Ÿ   โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰โ–‰ 0/0 โ€” 00:00:00
To activate this project's virtualenv, run the following:
 $ pipenv shell
        7.81 real         6.39 user         1.64 sys
11:46 ~/Co/Ce/torchdft time pipenv install numpy --skip-lock
Installing numpyโ€ฆ
Collecting numpy
  Using cached https://files.pythonhosted.org/packages/f6/cd/b2c50b5190b66c711c23ef23c41d450297eb5a54d2033f8dcb3b8b13ac85/numpy-1.14.5-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Installing collected packages: numpy
Successfully installed numpy-1.14.5

Adding numpy to Pipfile's [packages]โ€ฆ
        4.97 real         2.88 user         1.81 sys
11:46 ~/Co/Ce/torchdft time pipenv lock --verbose
Locking [dev-packages] dependenciesโ€ฆ
Using pip: -i https://pypi.org/simple

                          ROUND 1                           
Current constraints:

Finding the best candidates:

Finding secondary dependencies:
------------------------------------------------------------
Result of round 1: stable, done

Locking [packages] dependenciesโ€ฆ
Using pip: -i https://pypi.org/simple

                          ROUND 1                           
Current constraints:
  numpy

Finding the best candidates:
  found candidate numpy==1.14.5 (constraint was <any>)

Finding secondary dependencies:
  numpy==1.14.5 not in cache, need to check index
  numpy==1.14.5             requires -
------------------------------------------------------------
Result of round 1: stable, done

Updated Pipfile.lock (4fccdf)!
      219.24 real        25.14 user         5.77 sys

์ด์ œ Numpy๊ฐ€ ํ›จ์”ฌ ๋” ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์‹ค ์ €๋Š” ๊ท€ํ•˜์˜ ์˜ˆ์ œ๋ฅผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!). ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ํ…Œ์ŠคํŠธ์—์„œ VM์˜ ์ฝœ๋“œ ์บ์‹œ์—์„œ ~30์ดˆ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ๊ฐœ์„ ๋œ ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €์—๊ฒŒ๋„ ์ƒ๋‹นํžˆ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋งค์šฐ ๋น ๋ฅธ ์—ฐ๊ฒฐ์— ์•‰์•„ ์žˆ๊ณ  14์ดˆ๋งŒํผ ๋‚ฎ์•„์กŒ์ง€๋งŒ ๋‹ค์šด๋กœ๋“œ๊ฐ€ 30MB/s๋กœ ์ง„ํ–‰๋˜์—ˆ์„ ๋•Œ์˜€์Šต๋‹ˆ๋‹ค. numpy ์†Œ์Šค ์ฝ”๋“œ์˜ ๋‹จ์ผ ์‚ฌ๋ณธ ์™ธ์— ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ค‘๋ณต ํœ ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(ํ™•์‹คํ•˜์ง€ ์•Š์Œ). ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ƒํ™ฉ์„ ํ‰๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

fe ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ด์ œ ์ด๋ฅผ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ๋ฐฐํฌํ•˜์—ฌ Pipfile.lock์„ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํŠน์ • ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ž ๊ธˆ ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์—†์œผ๋ฉด ๋„์›€์„ ๋“œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์ด์Šˆ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

pipenv ์ž ๊ธˆ์˜ ์„ฑ๋Šฅ์„ ๋ฒค์น˜๋งˆํ‚นํ•˜๋ ค๋ฉด ์ข…์†์„ฑ์— pytmx๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...
pipenv ์ž ๊ธˆ์€ ์šฐ๋ฆฌ์—๊ฒŒ 1์‹œ๊ฐ„ ์ด์ƒ ๊ฑธ๋ ธ๊ณ (์ธํ„ฐ๋„ท ์†๋„๊ฐ€ ๊ฝค ๋Š๋ฆผ) pytmx๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ์•ฝ 5๋ถ„์œผ๋กœ ์ค„์–ด๋“ค์—ˆ๊ณ  ๋งˆ์นจ๋‚ด pipenv๊ฐ€ ๋” ์œ ์šฉํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” pytmx๊ฐ€ ํฐ ๋ชจ๋†€๋ฆฌ์‹ lib์ด๊ณ  opengl/pygame ๋ฐ ๊ธฐํƒ€ ๊ด€๋ จ ํ•ญ๋ชฉ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ํŒจํ‚ค์ง€๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ํŒจํ‚ค์ง€๊ฐ€ ์–ผ๋งˆ๋‚˜ ํฌ๋”๋ผ๋„ pipenv ์ž ๊ธˆ์— 1์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ 1์‹œ๊ฐ„๋„ ๊ฑธ๋ฆฌ์ง€ ์•Š์•„

$ cat Pipfile
[packages]
pytmx = "*"

$ time pipenv lock --clear
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock (eb50ab)!

real    0m2.827s
user    0m2.287s
sys 0m0.390s

๋˜ํ•œ PyTMX๋Š” PyPI์—์„œ 20kb ๋ฏธ๋งŒ์ด๊ณ  6๊ฐœ(์ดˆ์†Œํ˜•)์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฏ€๋กœ ๋„คํŠธ์›Œํ‚น์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ํ™˜๊ฒฝ์—์„œ ๋‹ค๋ฅธ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด ๊ฒŒ์ž„ ๋“ฑ์— ๋ช…์‹œ ์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ์ž‘์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!
๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ์ง€๋งŒ CPU์™€ SSD๊ฐ€ ์ตœ๊ณ ์ด๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋Š๋ฆฐ ์ธํ„ฐ๋„ท๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@techalchemy ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. pipenv uninstall package_name ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•œ ํ›„ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์ฃผ ์˜ค๋žซ๋™์•ˆ ์ž ๊ธˆ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ด๋‘  ์†์—์„œ ๋ฌด์ž‘์œ„ ์ƒท์œผ๋กœ ์ด ํ† ๋ก ์— ์—๋„ˆ์ง€๋ฅผ ์†Œ๋น„ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
https://github.com/Mathspy/tic-tac-toe-NN/tree/ab6731d216c66f5e09a4dabbe383df6dc745ba18

ํ•˜๋ ค๊ณ 
pipenv install
์ด ์ž ๊ธˆ์ด ์—†๋Š” ์ €์žฅ์†Œ์—์„œ ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ ์ง€๊ธˆ๊นŒ์ง€ 700MB ์ด์ƒ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.
Locking [packages] dependencies...

์ž ์‹œ ํ›„ ์ค‘๋‹จํ•˜๊ณ  ์ˆ˜์ •๋  ๋•Œ๊นŒ์ง€ --skip-lock ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

lock ์ด ์ •๋ง ๋Š๋ฆฌ๊ณ  files.pythonhosted.org ์—์„œ scipy flask ๋“ฑ์— ์˜์กดํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ 800MB๊ฐ€ ๋„˜๋Š” ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ files.pythonhosted.org ๋Œ€ํ•œ ์š”์ฒญ์„ ์Šค๋‹ˆํ•‘ํ–ˆ๋Š”๋ฐ pip ๋˜๋Š” pipenv๊ฐ€ ์™„์ „ํžˆ ๋ถˆํ•„์š”ํ•œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์–ด lock ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋Š๋ ค์กŒ์Šต๋‹ˆ๋‹ค.

1535625096148

์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์ผํ•œ ๋ฒ„์ „ numpy ์ด ์ „์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Mac์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ Windows/Linux์šฉ ํœ ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์„ค์ •:

$ pipenv --version
pipenv, version 2018.05.18

$ pip -V
pip 18.0 from /usr/local/lib/python2.7/site-packages/pip (python 2.7)

์—ฌ๊ธฐ์— ๋””๋ฒ„๊น…์— ๋„์›€์ด ๋˜๋Š” ์ถ”๊ฐ€ Pipfiles๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋Œ€๋ถ€๋ถ„ @AlJohri , ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค/์ž ๊ธˆ/io์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

screenshot 2018-10-25 at 12 27 07
์ด๋ฏธ ์•ฝ 5 ๋ถ„ ๋™์•ˆ ์—ฌ๊ธฐ์— ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ผ์ข…์˜ pip ์„ค์น˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  Homebrew๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฒƒ์„ ์ƒˆ๋กœ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ฝ 6~7๋ถ„ ํ›„ ๋“œ๋””์–ด ์™„์„ฑ. Python๊ณผ Pipenv๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์œผ๋ฏ€๋กœ ๋””๋ฒ„๊น…์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ฐพ๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค! :)

์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•  ์ •๋„๋กœ ๋งค์šฐ ๋‚˜์ฉ๋‹ˆ๋‹ค.

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

ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@techalchemy ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ๋‹ค๋ฉด. ๊ธฐ์—ฌํ•˜๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

lock ์ด ์ •๋ง ๋Š๋ฆฌ๊ณ  files.pythonhosted.org ์—์„œ scipy flask ๋“ฑ์— ์˜์กดํ•˜๋Š” ์†Œ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ 800MB๊ฐ€ ๋„˜๋Š” ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •์ ์ธ ์ฆ๊ฑฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ scipy ๊ฐ€ ๋งค์šฐ ๊ธด pipenv ์ž ๊ธˆ ์‹œ๊ฐ„๊ณผ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ์˜์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ์ •๋ง ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ €๋Š” PyPDF2์™€ textract๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. pipenv๋ฅผ ์ž ๊ทธ๋Š” ๋ฐ ~10๋ถ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

pipenv์˜ ๋Š๋ฆผ์€ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •๋ง๋กœ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ pip + virtualenv๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋„์šธ ๋ฐฉ๋ฒ•์ด ์—†๋‚˜์š”?
https://github.com/pypa/pipenv/issues/1914์˜ ์†์ž„์ˆ˜

/ ํŽธ์ง‘: btw, pipenv install ๊ฐ€ ์ž ๊ธˆ ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? o.ร’ ์ž ๊ธˆ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋œ ํ›„ ๋ฐฉ๊ธˆ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์ด์ œ ์ƒˆ ์ž ๊ธˆ ํŒŒ์ผ์„ ๋ณด๋‹ˆ pandas๊ฐ€ 0.23.4์—์„œ 0.24.0์œผ๋กœ, numpy๊ฐ€ 0.16.0์—์„œ 0.16.1๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ pipenv update ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€

๋นจ๋ฆฌ ์„ค์น˜ํ•˜๊ณ  ๋Š๋ฆฌ๊ฒŒ ์ž ๊ธฐ๋ฏ€๋กœ Installation Succeeded ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ์ฆ‰์‹œ ๊ณ„์† ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค... ๋‹ค๋ฅธ ๊ฒƒ์„ ์„ค์น˜ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด...

... ๋˜๋Š” ์ž ๊ธˆ ํŒŒ์ผ์„ ์ผ๋ถ€ ์ €์žฅ์†Œ์— ํ‘ธ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

lock ๊ฐ€ ์ด๋ฏธ ๋ณ„๋„์˜ ๋ช…๋ น์ธ ๊ฒƒ์„ ๋ณผ ๋•Œ install ๊ฐ€ ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํ•œํŽธ install ์˜ต์…˜ ์„ค๋ช…์€ ์ž ๊ธˆ๋„ ๋ฐœ์ƒํ•˜๋„๋ก ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ --skip-lock ๊ถŒ์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

Pipenv๋Š” ์ •๋ง ๋ฉ‹์ง„ ๋„๊ตฌ์ด๊ณ  ์ถ”์ฒœํ•˜๊ณค ํ–ˆ์ง€๋งŒ 8๊ฐœ์˜ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์ž ๊ธ€ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค... ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™๊ณ  ๋งค์šฐ ์‹ค๋ง์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ pypy์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์ข…์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—์„œ ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ๋„๊ตฌ๋Š” ๋‚ด ๋ชฉ์ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x10e12e400> searcher: searcher_re: 0: re.compile('\n') <pexpect.popen_spawn.PopenSpawn object at 0x10e12e400> searcher: searcher_re: 0: re.compile('\n') pipenv lock -r 87.22s user 18.57s system 11% cpu 15:02.77 total

์ด๊ฒƒ์ด ์ด ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Pipenv๋Š” ๋„ˆ๋ฌด ๋Š๋ ค์„œ ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋“œ๋ฌธ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ญ์ƒ ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

๋‚ด๋ถ€์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ์•Œ์ง€ ๋ชปํ•œ ์ฑ„ ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„์˜ ๋กœ์ปฌ ์บ์‹œ๋กœ ํ›Œ๋ฅญํ•˜๊ฒŒ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐ : ์šฐ๋ฆฌ๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ์บ์‹œํ•˜๋Š” ๊ฒฝ์šฐ x-1.2.3 ์— ๋”ฐ๋ผ y>=3.4 , ์šฐ๋ฆฌ๋Š” ๋กœ์ปฌ ํ˜„์žฌ ์ข…์†์„ฑ์„ ํ•œ ๋ฒˆ์— ํŒจํ‚ค์ง€ ํ•˜๋‚˜๋ฅผ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ™•๋Œ€ํ•˜๊ณ , ํ™•์ธ์— ๋๋‚ผ ์ผ์„ ๋งŽ์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . lock ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • Pipfile์„ ์บ์‹œ์™€ ๋น„๊ตํ•˜๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์ข…์†์„ฑ์„ ๊ณ„์‚ฐํ•˜์‹ญ์‹œ์˜ค.

    • ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์บ์‹œ

  • ์„ค์น˜.

๋ชจ๋“  ๊ฒฝ์šฐ์— ์ฒ˜์Œ์—๋Š” ๋Š๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ํ›„์† ์ž ๊ธˆ์€ ๊ณ ํ†ต์Šค๋Ÿฝ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

์ž‘์€ ํ”„๋กœ์ ํŠธ์— pip ๋Œ€์‹  pipenv๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•œ ์ฒซ ๋ฒˆ์งธ ์ผ์€ pipenv install -r requirements.txt ์ž…๋‹ˆ๋‹ค. ์•ฝ 10๋ถ„ ๋™์•ˆ ์ข…์†์„ฑ์„ ์ž ๊ทธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‚˜๋Š” ํ•์œผ๋กœ ๋Œ์•„๊ฐˆ ๊ฒƒ์ด๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋น„์šฉ์„ ์ง€์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ์†ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ์„œ๋ฒ„์— ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๋ฉด ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์„œ๋ฒ„๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. 1GB RAM์ด ์žˆ๋Š” AWS EC2 ์ธ์Šคํ„ด์Šค t2.micro ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋งŽ์€ RAM์€ ์ข…์†์„ฑ์ด ๊ฑฐ์˜ ์—†๋Š” ๋‹จ์ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ์„ค์น˜ ์‹œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•œ ๊ฐ€์ง€๋ฟ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ˆ˜๋…„ ๋™์•ˆ ๋ณด๋ฅ˜ ์ค‘์ด๋ฉฐ ์ด์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์—†์ด ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ์ข‹์€ ๋„๊ตฌ๊ฐ€ ๋ฌด์‹œ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ ˆ๋Œ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. conda์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ณ ์ˆ˜ํ•˜๊ฑฐ๋‚˜ virtualenv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/sdispater/poetry์— ํ•œ ๋ฒˆ ๋„์ „ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:|

๊ด€๋ฆฌ์ž๊ฐ€ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ“๊ธ€๋กœ ๋‹ซ์„ ์ˆ˜ ์žˆ๋‚˜์š”? ํ† ๋ก ์— ์œ ์šฉํ•œ ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์ž‘์—…์„ ์ถ”์ ํ•˜๋Š” ํ‹ฐ์ผ“์„ ๊ตฌ๋…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ 99%๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ง•์ง•๋Œ€์ง€ ๋ง๊ณ  ์ž…์ด ์žˆ๋Š” ๊ณณ์— ์‹œ๊ฐ„์„ ๋‘๊ณ  PR์„ ์ œ์ถœํ•˜์„ธ์š”.

์•ˆ๋…•ํ•˜์„ธ์š” @idvorkin ์ž…๋‹ˆ๋‹ค .

๋‚˜๋Š” ํ•œ ๋ฒˆ ์‹œ๋„ํ–ˆ๋‹ค.
์‚ฌ์†Œํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ๋ช‡ ์ฃผ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.
ํ† ๋ก ์˜ ์–‘์„ ์‹ค์ œ ์ˆ˜์ • ํฌ๊ธฐ์™€ ๋น„๊ตํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์— ๋” ์ด์ƒ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ท€ํ•˜์˜ ์กฐ์–ธ์€ ๊ท€ํ•˜๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋งŒํผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ @Jamim (๊ด€๋ฆฌ์ž๋„ ์˜์‹ฌ๋จ), ๊ธฐ์—ฌํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ PR์„ ์ฝ์—ˆ๊ณ  ๊ทธ ์ขŒ์ ˆ์— ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๊ฒƒ ์— ๋Œ€ํ•ด

๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ ๊ธ์ •์ ์ธ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•˜๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์€ ๊ตฌ๋ฌธ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ด€๋ฆฌ์ž๋ฅผ ๋งŒ๋‚œ ์ ์ด ์—†์ง€๋งŒ, ๊ทธ๋“ค์ด ๋‚˜์™€ ๊ฐ™๋‹ค๋ฉด(๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ๋‹น์‹ ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค) ๊ทธ๋“ค์€ ์ด ํ”„๋กœ์ ํŠธ์— ์“ธ ์—๋„ˆ์ง€๊ฐ€ ์žˆ๊ธฐ๋„ ์ „์— ์•ฝ์†์œผ๋กœ ๊ฐ€๋“ ์ฐฌ ๋ฐ”์œ ์‚ถ์„ ์‚ฌ๋Š” ์‚ฌ๋žŒ๋“ค์ž…๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋‹น์‹ (๋˜๋Š” ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€)์ด ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค๋ฉด, ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. .

๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด๊ฒƒ์— ์‹œ๊ฐ„์„ ํ• ์• ํ•ด์ค˜์„œ ๊ณ ๋ง™์ง€๋งŒ, ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ README.md ์˜ ์‚ฌ์šฉ์ž ํ‰๊ฐ€ ๋ฐ”๋กœ ์œ„์— ์•„์ง ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ตต๊ฒŒ ๊ฒฝ๊ณ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ด ๋Š๋ฆฐ ์ž ๊ธˆ์— ๋Œ€ํ•ด ์•Œ์•„๋‚ด๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ pip/virtualenv ์Šคํƒ์„ pipenv๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐ ๊ท€์ค‘ํ•œ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋„๋ก ์˜ค๋„ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋“ค์ด ์ด ๋Š๋ฆฐ ์ž ๊ธˆ์— ๋Œ€ํ•ด ์•Œ์•„๋‚ด๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ๋•Œ๊นŒ์ง€.

์‹ค์ œ๋กœ ๋งค์šฐ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๋ฅผ ๋†’์ด๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๊ณผ์žฅ๋ฒ•์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งค์ผ pipenv๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ณตํ•˜๋Š” ์›Œํฌํ”Œ๋กœ ๊ฐœ์„  ์‚ฌํ•ญ์€ ๊ฐ€๋” ๋ฐœ์ƒํ•˜๋Š” ์†๋„๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ œ๊ฐ€ ํ•ญ์ƒ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋Š๋ผ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๋„๋ก ์ž ๊ทธ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? :open_mouth:

@bochecha ๋‚ด ์ง„์ˆ ์€ ๋‹น์‹ ์˜ ์˜๊ฒฌ์œผ๋กœ๋Š” ๊ณผ์žฅ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋™๋ฃŒ๋กœ๋ถ€ํ„ฐ pipenv์— ๋Œ€ํ•ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๋‚˜๋Š” ์˜ค๋ž˜๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. pip/virtualenv์—์„œ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๋กœ pipenv. ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ž‘๋™ ๋ฐฉ์‹์„ ํ™•์ธํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ ์—…๋ฐ์ดํŠธํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. pipenv install <something> ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์—„์ฒญ๋‚˜๊ฒŒ ์˜ค๋žœ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ณ„์‚ฐ ์ค‘์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์‚ฐ ์ค€๋น„ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด ์บ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ~10๋ฒˆ์งธ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ํ›„ ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ–ˆ๊ณ  ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. Pipfile ๋ฐ Pipfile.lock ํ•˜๊ณ  pip/virtualenv ์›Œํฌํ”Œ๋กœ๋กœ ๋Œ์•„๊ฐ”์Šต๋‹ˆ๋‹ค. ์‹œ๋ฅผ ์จ๋ณด๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ํ•œ ์‹œ๊ฐ„๋„ ๋” ๊ฑธ์„ ์ˆ˜๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ˆ๋ฅผ ๋“ค์–ด JS ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋ฐœ์ƒํ•˜์ง€๋งŒ Python ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋Š” ์˜ˆ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ํ”ผํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. README.md ์˜ ๋ฉด์ฑ… ์กฐํ•ญ์€ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถˆํŽธํ•จ์„ ๋‚ด ์˜๊ฒฌ์— ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ œ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ์‹ ๊ทœ ์ด๋ฏผ์ž์˜ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‚˜์œ ๊ฒฝํ—˜์„ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ž ์žฌ์ ์ธ ๋ฏธ๋ž˜ ์‚ฌ์šฉ์ž๋กœ ๋‚จ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ™”๋ฅผ ๋‚ด์ง€๋Š” ์•Š์ง€๋งŒ ๋ฉด์ฑ… ์กฐํ•ญ์ด ์—†๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ๋กœ ํŒ๋งคํ•˜์—ฌ ์ด์— ๋Œ€ํ•ด ๊ณต๊ฐœ์ ์œผ๋กœ ์ด์•ผ๊ธฐํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ํ™”๋ฅผ ๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚˜๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๋„๊ตฌ๋ฅผ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐ ๋‚ด ์†Œ์ค‘ํ•œ ์‹œ๊ฐ„์„ ๊ฝค ๋งŽ์ด ๋‚ญ๋น„ํ–ˆ์ง€๋งŒ pipenv๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ pip์™€ ๋‚ด ์ž์‹ ์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์‹œ๊ฐ„๊ณผ ๋Œ€์—ญํญ์ด ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ.

pipenv install์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค

๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ pipenv๋กœ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์ž ๊ทธ๊ฑฐ๋‚˜ ์„ค์น˜ํ•˜๋Š” pipenv install -r requirements.txt ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋ฌธ์„œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌด์—‡๋ณด๋‹ค pipenv๊ฐ€ pip/virtualenv ์›Œํฌํ”Œ๋กœ์˜ ์ข‹์€ ๋Œ€์ฒดํ’ˆ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๊ณ  pipenv๊ฐ€ ํ”„๋กœ๋•์…˜ ์ค€๋น„๊ฐ€ ๋˜๋Š” ๋‚  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค/ํ”„๋กœ์ ํŠธ์— ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@bochecha ๋‚ด๊ฐ€ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์ตœ์‹  ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋‹ค์Œ ํŒจํ‚ค์ง€๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ pip๋กœ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ pipenv๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ์ „ํ˜€ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋จผ์ € pipenv๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ๋‹ค์Œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆ˜ํ–‰ํ–ˆ๋Š”๋ฐ ์ •๋ง ์งœ์ฆ์ด ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €์™€ ๊ฐ™์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค(์œ„์˜ ์„ค๋ช… ์ฐธ์กฐ). README.md ์— ์–ธ๊ธ‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ "๊ฐ ์ž ๊ธˆ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งŽ์€ ํŒจํ‚ค์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ์„ค์น˜/์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ pipenv๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋จ"(๋‹ค์‹œ ๊ตต๊ฒŒ, ํ›„๊ธฐ ์ƒ๋‹จ) ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ์ „์— ๋ฌธ์ œ๋ฅผ ๋ฐœํ‘œํ•˜๋ฉด ๋ชจ๋‘๊ฐ€ ๊ฐ์‚ฌํ•  ๊ฒƒ์ด๊ณ , ๋ฌธ์ œ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ชจ๋‘๊ฐ€ ํ™”๋ฅผ ๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์˜. ๋‚˜๋Š” ์‹œ๋ฅผ ์กฐ์‚ฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  pipenv๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๋‚ด OS์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ. ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์บ์ฃผ์–ผํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด imho ๊ฐ€ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋งค์šฐ ์œ ์šฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค! ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์„ ๋งค์šฐ ์“ธ๋ชจ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‹จ์ง€ ์ด๊ฒƒ ํ•˜๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šฌํ”„๊ฒŒ๋„ ๊ธฐ์—ฌํ•  ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค :|

๋ฌผ๋ก , ๊ฐœ๋ฐœ ์„ธ์…˜ ์ค‘ ์—ฌ๋Ÿฌ ์„ค์น˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์€ ์„ฑ๊ฐ€์‹  ์ผ์ด์ง€๋งŒ ์ด๊ฒƒ์€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ์€ ๋กœ์ปฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ repo์— ํ‘ธ์‹œํ•˜๊ธฐ ์ „์— ์ž ๊ธˆ ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ๋ฐœ ์„ธ์…˜ ์ค‘์— โ€”skip-lock ํ”Œ๋ž˜๊ทธ๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋งˆ์ง€๋ง‰์— pipenv lock ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ,
์ž ๊ทธ๋Š” ๊ฒƒ์€ verrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrywwwwwwwwwwwwwwwwwwwwwwwwwwww.

PIP_NO_CACHE_DIR=off
์ด ํ™˜๊ฒฝ์€ pip ํŒจํ‚ค์ง€ ์บ์‹œ๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋œ ๊ฒฝ์šฐ ์ž ๊ธˆ์„ ๋” ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

ํ”„๋กœ์ ํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ,
์ž ๊ทธ๋Š” ๊ฒƒ์€ verrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrywwwwwwwwwwwwwwwwwwwwwwwwwwww.

์ด ํ”„๋กœ์ ํŠธ๋Š” ์ฃฝ์€ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์†๋„ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ํ›จ์”ฌ ๋” ๋น ๋ฅธ Poetry ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

@Jamim , Poetry๋ฅผ ์ถ”์ฒœํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋–ค ์ด์œ ๋กœ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ ‘ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ์–ด๋ณด๊ธฐ๋ฅผ ์ฝ์€ ํ›„์— ์‹œ๋„ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Pipenv์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ด์ ๋„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค(https://github.com/sdispater/poetry/#what-about-pipenv).

๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฃฝ์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๊ณผ์žฅ๋œ ํ‘œํ˜„์ด๋ฉฐ, ๋‚ด๊ฐ€ pipenv ์ž‘์„ฑ์ž์˜ ์ž…์žฅ์ด๋ผ๋ฉด ๋ฌด๋ก€ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž๋Š” ์–ด์ œ ๋ฌธ์ œ ์„น์…˜์—์„œ ๋‹ต๋ณ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž ๊ธˆ ๋ฌธ์ œ๊ฐ€ ๊ฐ„๊ณผ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด Poetry๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๋„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/sdispater/poetry/issues/338

๋‚ด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์›์ธ์€ pylint์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Pipenv(pip)๋Š” ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž ๊ธˆ์€ ์˜์›ํžˆ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค!
pipenv, version 2018.11.26


์ตœ์†Œํ•œ์˜ ์ž‘์—… ์˜ˆ

djbrown@DESKTOP-65P6D75:~$ mkdir test
djbrown@DESKTOP-65P6D75:~$ cd test
djbrown@DESKTOP-65P6D75:~/test$ pipenv install --dev pylint --verbose
Creating a virtualenv for this projectโ€ฆ
Pipfile: /home/djbrown/test/Pipfile
Using /usr/bin/python3 (3.6.9) to create virtualenvโ€ฆ
โ ธ Creating virtual environment...Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/python3
Also creating executable in /home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/python
Installing setuptools, pip, wheel...done.

โœ” Successfully created virtual environment!
Virtualenv location: /home/djbrown/.local/share/virtualenvs/test-PW-auWy_
Creating a Pipfile for this projectโ€ฆ
Installing pylintโ€ฆ
โ ‹ Installing...Installing 'pylint'
$ ['/home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/pip', 'install', '--verbose', '--upgrade', 'pylint', '-i', 'https://pypi.org/simple']
Adding pylint to Pipfile's [dev-packages]โ€ฆ
โœ” Installation Succeeded
Pipfile.lock not found, creatingโ€ฆ
Locking [dev-packages] dependenciesโ€ฆ
โ ‡ Locking...

pipenv ์— ๋Œ€ํ•ด ๋งŽ์ด ๋“ฃ๊ณ  ์˜ค๋Š˜ ํ•ด๋ดค๋Š”๋ฐ,
์ž ๊ธˆ๋„ ๋‚˜์—๊ฒŒ ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ฏธ 2๋ถ„ ์ •๋„ ์ง€๋‚ฌ๋Š”๋ฐ ์—ฌ์ „ํžˆ ์ž ๊น€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
๋‹ค์šด๋กœ๋“œ๋Š” ๊ฝค ๋น ๋ฅด์ง€๋งŒ ๋ฌธ์ œ๋Š” ์ž ๊ธˆ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?
apt, python 3.7.5์˜ Pop os 19.10, pipenv, ๋ฒ„์ „ 11.9.0์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ์ฃผ์ œ https://github.com/pypa/pipenv/issues/1914#issuecomment -457965038์— ๋Œ€ํ•œ #1914์˜ ์ด ํ›Œ๋ฅญํ•œ ์˜๊ฒฌ์— ์ฃผ๋ชฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ์ข…์†์„ฑ์„ ๋” ์ด์ƒ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Œ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํƒ€๋‹น์„ฑ์— ๋Œ€ํ•ด ๋…ผํ‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ž ๊ธˆ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.
pipenv lock ๋ฐ pipenv install some-package ์‹คํ–‰ ๋ชจ๋‘์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” pipenv ์ •๋ง ์ข‹์•„ํ•˜์ง€๋งŒ ๋Œ€์—ญํญ๊ณผ ์‹œ๊ฐ„๋งŒํผ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

$ pipenv --rm
$ virtualenv .
$ source bin/activate
$ # Create a requirement file (Cause pipenv lock -r > requirements.txt... you know!)
$ pip install -r requirement.txt

๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฑด์Šน์„ ๋น•๋‹ˆ๋‹ค...

@ravexina ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ํ™•์‹คํžˆ ์‹œ๋„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

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