Pipenv: Ubuntu 18.04์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Œ, pip ์ค‘๋‹จ("ImportError: ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Œ")

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

Ubuntu 18.04์—์„œ pipenv๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด pip / pip3์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

pipenv์˜ ์„ค์น˜ ๋ฐ ์ž‘๋™ ๋ฒ„์ „.

์‹ค์ œ ๊ฒฐ๊ณผ

pip ๋˜๋Š” pip3์„ ํ†ตํ•ด pipenv๋ฅผ ์„ค์น˜ํ•˜๋ ค๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ pip/pip3์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

โžœ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main
๋ณต์ œ ๋‹จ๊ณ„
  1. ์šฐ๋ถ„ํˆฌ 18.04 ์„ค์ •
  2. pip install pipenv ๋˜๋Š” pip3 install pipenv
  3. pip ๋˜๋Š” pip3 โ€“ ์˜ค๋ฅ˜๊ฐ€ ์ธ์‡„๋˜๊ณ  pip / pip3์ด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

ํ•˜์ง€๋งŒ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pipenv๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ PPA๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— apt ๋ฅผ ํ†ตํ•œ ์„ค์น˜๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


ํ•ด๊ฒฐ์ฑ…

์•„๋ž˜ ์†”๋ฃจ์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹ ์€ ๊ฐ€์งˆ ํ•„์š”๊ฐ€

export PATH="${HOME}/.local/bin:$PATH"

์…ธ ๊ตฌ์„ฑ์—์„œ. ๊ฒฝ๋กœ๊ฐ€ ์—†์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์นœ ๊ฒƒ์€ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

export PATH="${HOME}/.local/bin:$PATH"

ํ”„๋กœํ•„์—.

ํŽธ์ง‘: ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด hash -r ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์…ธ์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋ณ„๋กœ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

์ข€ ๋” ์ž์„ธํ•œ ์„ค์น˜ ์ง€์นจ์ด๋‚˜ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” pip ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์ง€๋งŒ ๊ฒฝ๋กœ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฅผ ์ฝ์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์™€ ๋ฐฐํฌํŒ์˜ ์ƒํƒœ๊ณ„๋Š” ๋‹จ์ˆœํ•œ ๊ทœ์น™์— ๋น„ํ•ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹คโ€ฆ

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

๋‹ค์Œ์€ pip3์˜ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

werner in ~ at octopus23
โžœ pip3 install pipenv
Collecting pipenv
  Using cached https://files.pythonhosted.org/packages/2c/01/37a5867a47d52856b077d0faa561b791cb6e6e3e9410837b6d62f569c1e6/pipenv-11.10.1-py3-none-any.whl
Collecting virtualenv (from pipenv)
  Using cached https://files.pythonhosted.org/packages/ed/ea/e20b5cbebf45d3096e8138ab74eda139595d827677f38e9dd543e6015bdf/virtualenv-15.2.0-py2.py3-none-any.whl
Collecting pip>=9.0.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Collecting setuptools>=36.2.1 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/8c/10/79282747f9169f21c053c562a0baa21815a8c7879be97abd930dbcf862e8/setuptools-39.1.0-py2.py3-none-any.whl
Collecting virtualenv-clone>=0.2.5 (from pipenv)
  Using cached https://files.pythonhosted.org/packages/6d/c2/dccb5ccf599e0c5d1eea6acbd058af7a71384f9740179db67a9182a24798/virtualenv_clone-0.3.0-py2.py3-none-any.whl
Collecting certifi (from pipenv)
  Using cached https://files.pythonhosted.org/packages/7c/e6/92ad559b7192d846975fc916b65f667c7b8c3a32bea7372340bfe9a15fa5/certifi-2018.4.16-py2.py3-none-any.whl
Installing collected packages: virtualenv, pip, setuptools, virtualenv-clone, certifi, pipenv
Successfully installed certifi-2018.4.16 pip-10.0.1 pipenv-11.10.1 setuptools-39.1.0 virtualenv-15.2.0 virtualenv-clone-0.3.0

๋‚˜๋Š” ์ด๊ฒƒ์ด pip์— ๋”ฐ๋ฅธ Pipenv์˜ ๊ฒฐ๊ณผ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ Pipenv๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ฐ๋น„์•ˆ์€ Python-pip ์ปคํ”Œ๋ง์„ ๊นจ๋œจ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ž˜์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Pipenv๋Š” ํ™•์‹คํžˆ pip์— ์˜์กดํ•˜๋Š” ์œ ์ผํ•œ ํŒจํ‚ค์ง€๋Š” ์•„๋‹ˆ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@ncoghlan ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ตฌ์ฒด์ ์œผ๋กœ ํŠน๋ณ„ํžˆ

  1. ํŒจํ‚ค์ง€๊ฐ€ pip์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  2. 1. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์™€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ถฉ๋Œ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์ ธ์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  3. 2. ์˜ˆ์ธ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ?
  4. 2. ์•„๋‹ˆ์˜ค์ธ ๊ฒฝ์šฐ ๋ˆ„๊ฐ€ ์ฑ…์ž„์„ ์ ธ์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ€์•ˆ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์–ด์จŒ๋“  ์šฐ๋ถ„ํˆฌ์—์„œ๋Š” ์ ˆ๋Œ€ sudo pip install ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • APT๋ฅผ ๋๊นŒ์ง€ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • pip install --user
  • pipsi์™€ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ง€์ • ๊ด€๋ฆฌ์ž

๋˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹œ์Šคํ…œ Python์„ ์™„์ „ํžˆ ํ”ผํ•˜๊ณ  pyenv ๋˜๋Š” ๋‹ค๋ฅธ Python ๋Ÿฐํƒ€์ž„ ๊ด€๋ฆฌ์ž๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๊ฒƒ๋“ค์„ ๊ธ์–ด๋ผ. APT์—์„œ Python์„ ํ”ผํ•˜์‹ญ์‹œ์˜ค.

์–ด์จŒ๋“  ์šฐ๋ถ„ํˆฌ์— ์•„๋ฌด ๊ฒƒ๋„ sudo pip ์„ค์น˜ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ ํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ถ„ํˆฌ์—์„œ sudo pip ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ๋ฌธ์ œ์ ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€๋Šฅํ•˜๋ฉด apt ํ•˜๊ฑฐ๋‚˜ --user ๊ณ ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

์•„ ์ด์ œ ๋ฌธ์ œ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋ชจ๋“ˆ์€ ์‹œ์Šคํ…œ๋“ค๋ณด๋‹ค ์šฐ์„ ํ•˜์ง€๋งŒ, /usr/bin ์•ž์—์žˆ๋Š” $HOME/.local/bin ๋‹น์‹ ์˜ PATH . /usr/bin/python ์‹œ์Šคํ…œ pip ์„ค์น˜(์—ฌ์ „ํžˆ 9.x์ž„)๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž ์„ค์น˜(10.x์ž„)๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์—‰๋ง์ด์•ผ.

2095๋Š” ๋™์ผํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ์ˆ™ํ•œ PATH ์— ์˜์กดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์—ด์–ด๋‘๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ๋งค์šฐ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

  • หœ/.local/bin ์‚ฌ์šฉ์ž์˜ PATH . 16.10 ์ดํ›„ Ubuntu์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ธ pip install --user ๋™์ž‘์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ํ•ญ์ƒ pip install --user ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ pip๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ๋ฐฐํฌํŒ์—์„œ ์ •๋ง ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ๋น„์•ˆ ์˜ ์ด์ƒํ•œ "dist-packages/site-packages" ํด๋”์กฐ์ฐจ๋„ ์‚ฌ์šฉ์ž์˜ ์‹ค์ˆ˜๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์šฐ๋ถ„ํˆฌ ์‚ฌ์šฉ์ž ์„ค์น˜(๋‹ค์–‘ํ•œ ์šฐ๋ถ„ํˆฌ ๋ฒ„์ „์˜ 1000๊ฐœ ์ด์ƒ์˜ ์„ค์น˜ ์กฐ์ง)์—์„œ ์ด ๋™์ž‘์„ ๋ณด์žฅํ–ˆ์œผ๋ฉฐ pip10์œผ๋กœ์˜ ์ „ํ™˜์€ ๋งค๋ ฅ์ฒ˜๋Ÿผ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

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

๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์นœ ๊ฒƒ์€ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

export PATH="${HOME}/.local/bin:$PATH"

ํ”„๋กœํ•„์—.

ํŽธ์ง‘: ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด hash -r ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์…ธ์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ๋ณ„๋กœ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

์ข€ ๋” ์ž์„ธํ•œ ์„ค์น˜ ์ง€์นจ์ด๋‚˜ ์ฃผ์˜ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” pip ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฒฝํ—˜์ด ๋งŽ์ง€ ์•Š์ง€๋งŒ ๊ฒฝ๋กœ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฅผ ์ฝ์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์™€ ๋ฐฐํฌํŒ์˜ ์ƒํƒœ๊ณ„๋Š” ๋‹จ์ˆœํ•œ ๊ทœ์น™์— ๋น„ํ•ด ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹คโ€ฆ

@slhck ๋ฉฐ์น  ์ „์— python ํ™˜๊ฒฝ๊ณผ sudo ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์„ค์น˜์— ๊ด€ํ•œ ์ด xkcd ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์‹ค์ œ๋กœ ๋„ˆ๋ฌด ์‹ค๋ง ์Šค๋Ÿฝ ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Ubuntu 18.04์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.
https://phoikoi.io/2018/04/03/bootstrap-pipenv-debian.html

๋˜ํ•œ https://github.com/pypa/python-packaging-user-guide/issues/396 ๋„ PATH / sys.path ์ˆœ์„œ ์ถฉ๋Œ์˜ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•ด ๋ฉ”๋ชจํ•ด ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @slhck . ๋‚ด๋ณด๋‚ด๊ธฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. /etc/profile์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Linux์— 2๊ฐ€์ง€ ์ˆ˜์ค€์˜ ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง•์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ •๋ง ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์œ ๊ฒƒ์€ *buntus์˜ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜(pip/pip3)์˜ ๋‘ ๊ฐ€์ง€ ๋ง›์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Launchpad์— ๊ทธ๊ฒƒ์„ ์ผ์Šต๋‹ˆ๋‹ค: https://bugs.launchpad.net/ubuntu/+source/python-pip/+bug/1772746

@texadactyl Debian์—๋Š” pip๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์ด ์ •์ฑ…(์ด๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค)์ด ์žˆ์œผ๋ฉฐ, ์ด์ „์˜ ๋งŽ์€ ๋ถˆ๋งŒ๊ณผ ํ•จ๊ป˜ ์ด๋ฅผ ๊ณ ์ˆ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ „ํ†ต์€ ๋ฐ๋น„์•ˆ์˜ ๋ฟŒ๋ฆฌ์— ๊นŠ์ด ๋ฟŒ๋ฆฌ๋ฅผ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์ด๊ฒƒ์„ ๋‹ค์‹œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ• ์ง€๋Š” ๋งค์šฐ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

Ubuntu 18 ๋ฐ Python 3.6์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์ˆ˜ํ–‰ํ•œ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

1) ๋จผ์ € ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/usr/bin/pip", 9ํ–‰,
pip import ๋ฉ”์ธ์—์„œ
ImportError: main ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

2) /user/bin/pip ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ž… ์‹œ์Šคํ…œ
pip._internal์—์„œ _main์œผ๋กœ ๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ
__name__ == '__main__'์ธ ๊ฒฝ์šฐ:
sys.exit(๋ฉ”์ธ())

3) ๊ทธ๋Ÿฐ ๋‹ค์Œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/usr/bin/pip3", 11ํ–‰,
sys.exit(๋ฉ”์ธ())
NameError: 'main' ์ด๋ฆ„์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

4) /usr/bin/pip3์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ž… ์‹œ์Šคํ…œ
pip._internal์—์„œ _main์œผ๋กœ ๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ
__name__ == '__main__'์ธ ๊ฒฝ์šฐ:
sys.exit(_main())

5) ๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ญ์ถ”์ (๊ฐ€์žฅ ์ตœ๊ทผ ํ˜ธ์ถœ ๋งˆ์ง€๋ง‰):
ํŒŒ์ผ "/usr/bin/pip3", 11ํ–‰,
sys.exit(๋ฉ”์ธ())
NameError: 'main' ์ด๋ฆ„์ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

6) ๋‚˜๋Š” main()์„ _main()์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊ฟจ๊ณ , ์งœ์ž” .. ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค!!! :) :)

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์•„์ฃผ ๋‚˜์œ ์กฐ์–ธ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ๋‚ด ์ด์ „ ์˜๊ฒฌ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค.

ํŽธ์ง‘ : @slhck ์˜ ์†”๋ฃจ์…˜์ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ์— ~/.local/bin ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ถ„ํˆฌ 16.04์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$ sudo apt install python3-pip
$ pip3 --version
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ python3 -m pip install --user pipenv
$ pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
ImportError: cannot import name 'main'

# revert back and fix pip
$ sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋„ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๊ณ  ๋ง๋ถ™์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝ๋กœ์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์œผ๋กœ ์ด๋ฏธ ~/.local/bin์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” bash๊ฐ€ ๋ช…๋ น์„ ํ•ด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ https://github.com/pypa/pip/issues/5221#issuecomment -381568428์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thernstig ๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์†”๋ฃจ์…˜์— ํ•„์š”ํ•œ hash -r ๋ช…๋ น์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.

@slhck ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์ง€๋งŒ ์ด๊ฒƒ์ด PATH์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋Š˜ ์ƒˆ๋กœ์šด Ubuntu 18.04 ์‹œ์Šคํ…œ์„ ์„ค์ •ํ•  ๋•Œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ–ˆ๊ณ  ์žฌ๋ถ€ํŒ…์„ ํ–ˆ์ง€๋งŒ PATH ์ˆ˜์ • ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋กœ๊ทธ์•„์›ƒ/๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ํ™•์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

python3-pip ๋ฅผ ํ†ตํ•ด pip3๋ฅผ ์„ค์น˜ํ•˜๊ณ  pip3 install --user pipenv pipenv๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ œ๋ชฉ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ~/.profile (์ฃผ์‹, ์ˆ˜์ • ์‚ฌํ•ญ ์—†์Œ)์—์„œ ๋‹ค์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ @slhck ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์žฌ๋ถ€ํŒ…ํ–ˆ๋Š”๋ฐ ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .local/bin ๊ฐ€ ์ด์ œ PATH ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๊ณ  pip3์ด ๋‹ค์‹œ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@jlitzingerdev ๊ฒฝ๋กœ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์…ธ๊ณผ ํ”„๋กœํ•„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ตฌ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ

@slhck ํ•˜์ง€๋งŒ ~/.local/bin ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‚ด ํŠน์ •ํ•œ ๊ฒฝ์šฐ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ์ธ ์‹œ PATH์— ์—†์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋ญ˜ํ•ด์•ผ ํ•˜์ฃ ?

๋ณต์› ๋ช…๋ น์„ ํฌํ•จ์‹œ์ผœ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. pip๋ฅผ ๋‹ค์‹œ ์ž‘๋™์‹œํ‚ค๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Ubuntu 18.04์—์„œ pipenv๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด pip / pip3์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

pipenv์˜ ์„ค์น˜ ๋ฐ ์ž‘๋™ ๋ฒ„์ „.

์‹ค์ œ ๊ฒฐ๊ณผ

pip ๋˜๋Š” pip3์„ ํ†ตํ•ด pipenv๋ฅผ ์„ค์น˜ํ•˜๋ ค๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ pip/pip3์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

โžœ pip
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main
๋ณต์ œ ๋‹จ๊ณ„
1. Set up Ubuntu 18.04

2. Run `pip install pipenv` or `pip3 install pipenv`

3. Run `pip` or `pip3` โ€“ the error is printed, and pip / pip3 do not work anymore.

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sudo python -m pip uninstall pip && sudo apt install python-pip --reinstall
sudo python3 -m pip uninstall pip && sudo apt install python3-pip --reinstall

ํ•˜์ง€๋งŒ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pipenv๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ PPA๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— apt ๋ฅผ ํ†ตํ•œ ์„ค์น˜๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค..

๋‚ด ์šฐ๋ถ„ํˆฌ 18 pip, pip3 ๋ฐ pip3.6์— 3๊ฐœ์˜ pip๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. pip๋Š” 2.7์šฉ์ž…๋‹ˆ๋‹ค. pip3์€ 3.5์šฉ์ด๊ณ  pip3.6์€ 3.6์šฉ์ž…๋‹ˆ๋‹ค. ์ด์ œ pip๋Š” ํŒŒ์ผ ์œ„์น˜๋ฅผ .local/bin ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ pip ๋ฐ pip3 ํŒŒ์ผ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์–ด๋Š pip3์ด /usr/bin/pip3์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. sudo nano /usr/bin/pip3 ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ !#/usr/bin/python3 ์œผ๋กœ #/usr/bin/python3.5๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ชจ๋“  ํ•์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค

๋‚ด ์šฐ๋ถ„ํˆฌ 18 pip, pip3 ๋ฐ pip3.6์— 3๊ฐœ์˜ pip๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. pip๋Š” 2.7์šฉ์ž…๋‹ˆ๋‹ค. pip3์€ 3.5์šฉ์ด๊ณ  pip3.6์€ 3.6์šฉ์ž…๋‹ˆ๋‹ค. ์ด์ œ pip๋Š” ํŒŒ์ผ ์œ„์น˜๋ฅผ .local/bin ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ pip ๋ฐ pip3 ํŒŒ์ผ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์–ด๋Š pip3์ด /usr/bin/pip3์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. sudo nano /usr/bin/pip3 ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ !#/usr/bin/python3 ์œผ๋กœ #/usr/bin/python3.5๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋ชจ๋“  ํ•์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž€๋‹ค

์ด ๋ชจ๋“  ๋‹จ๊ณ„๋Š” ์‹ค์ œ๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. /usr/bin ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ pip๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  apt ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์‹œ์Šคํ…œ ์„ค์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pipenv ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๊ธฐ๋ณด๋‹ค ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด๊ณ  ๋ฌธ์ œ๋ฅผ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ apt๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ์„ค์น˜ํ•ด๋„ ๋™์ผํ•œ ์ถœ๋ ฅ์ด ์ƒ์„ฑ๋˜๋ฏ€๋กœ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์ƒํƒœ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์œผ๋ฉฐ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ pip๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฉ”์ธ ์ด๋ฆ„์ด ๋ณด๋ ค๋Š” ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‚˜๋Š” ๋งน๋ชฉ์ ์œผ๋กœ ์œ„์˜ ํŽธ์ง‘์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ubuntu14์— ์žˆ์„ ๋•Œ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ˜ธ๊ฐ€๋กœ์„œ pip ํŒŒ์ผ์„ ํ™•์ธํ–ˆ๋Š”๋ฐ ubuntu18 pip3์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ๋œ ๊ฒƒ. ๋ฏธ๋ฆฌ ํŒจํ‚ค์ง€๋กœ ์ œ๊ณต๋˜๋Š” Python ๋ฒ„์ „์ด ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค.

python3.5 ๋ฐ 2.7์šฉ pip๋Š” pip ๋ชจ๋“ˆ์— main๋งŒ ์ •์˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  python3.6์—๋Š” pip._internal์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์œ„์˜ ๋‘ ๋ฌธ์žฅ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ3; ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ํŒŒ์ด์ฌ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
python 2.7๋งŒ ์žˆ๊ณ  ubuntu18๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐœ๋ฐœ์ž๋Š” python 3์„ python3.6์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ python3.4 pr 3.5๊ฐ€ ์„ค์น˜๋œ ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋จผ์ € python3์€ python3.5๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์ด์ œ ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋Š” ppython3.6์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ๋น„์•ˆ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ํ†ต์—ญ์‚ฌ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
๋‘˜ ๋‹ค ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

pip import ๋ฉ”์ธ์—์„œ
๊ทธ๋ฆฌ๊ณ 
pip._internal์—์„œ _main์œผ๋กœ ๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฐ์‚ฌ ํ•ด์š”
์ถ”์‹ 
์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ๋Š” ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๊ฒƒ์„ ๊ฐ•์˜ํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์—ด์ •์ ์ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋Š” github์—์„œ๋Š”; ํŠนํžˆ ๊ทธ๋“ค์ด ๋งŽ์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์ผ๋ถ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด๋Ÿฐ ์‚ฌ๋žŒ๋“ค์„ ๋‚™๋‹ด์‹œํ‚ค๊ธฐ ์‹œ์ž‘ํ•  ์ •๋„๋กœ ํ˜„๋ช…ํ•˜์ง€ ๋ง๋ผ๊ณ  ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ƒˆ ๋ฒ„์ „์€ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‹ค์‹œ๋Š” ๋‚˜๋ฅผ ๊ดด๋กญํžˆ์ง€ ๋งˆ

@r-tron18 ์‹œ์Šคํ…œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฑด์„ค์ ์ธ ์ œ์•ˆ์„ ํ•˜์‹  ๊ฒƒ ๊ฐ™์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ œ๊ณตํ•œ ์•ฝ๊ฐ„์˜ ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ์ž์‹ ์ด ํ•˜๋Š” ์ผ์„ ์•Œ๊ณ  ์žˆ๋Š” ์ˆ™๋ จ๋œ ์‚ฌ์šฉ์ž์ธ์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐ Q&A ์›น์‚ฌ์ดํŠธ์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜ ์ˆ˜์ •์„ ์‹œ๋„ํ•˜๊ฑฐ๋‚˜ sudo -์‹œ์Šคํ…œ ์ œ๊ณต ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๋„๋ก ๊ถŒ์žฅํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜์™€ ํ˜ผ๋ž€. ๊ทธ๊ฒƒ์€ ๋” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ด ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ์†”๋ฃจ์…˜์ธ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ : ์šฐ๋ฆฌ๋Š” ๊ทธ ์†”๋ฃจ์…˜์˜ ์žฅ์ ์— ๋Œ€ํ•ด ์‹œ๋ฏผ ํ† ๋ก ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GitHub๋Š” ์ œ๊ฐ€ ๊ทธ๊ฒƒ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” /usr/bin/pip3 ์˜ shebang์„ #!/usr/bin/python3.5 ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ํ•ด๋‹น ๋ฒ„์ „๋งŒ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. #!/usr/bin/python3 ์ฝ์–ด์•ผ ํ•˜๊ณ  /usr/bin/python3.6 (๋˜๋Š” ์‹œ์Šคํ…œ์— ํ˜„์žฌ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ)์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Python ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ์–ด์จŒ๋“  ํ•ด๋‹น ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ๋งํ•œ๋‹ค:

๊ทธ๋Ÿฌ๋‚˜ python3.4 pr 3.5๊ฐ€ ์„ค์น˜๋œ ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋จผ์ € python3์€ python3.5๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์ด์ œ ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋Š” ppython3.6์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ฐ๋น„์•ˆ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

Python 3.5๋ฅผ Python 3.6์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ python3 ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? ๋‹น์‹ ์ด ๊ด€์ฐฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ Debian ๋˜๋Š” Ubuntu์˜ ๋ฒ„๊ทธ๋ผ๋ฉด Python ์—…๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์„ค์ •ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฒ„๊ทธ๋Š” ์•„๋งˆ๋„ ์—…์ŠคํŠธ๋ฆผ์—์„œ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์ง€๋งŒ ์ด๊ฒƒ์ด PATH์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ค๋Š˜ ์ƒˆ๋กœ์šด Ubuntu 18.04 ์‹œ์Šคํ…œ์„ ์„ค์ •ํ•  ๋•Œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ–ˆ๊ณ  ์žฌ๋ถ€ํŒ…์„ ํ–ˆ์ง€๋งŒ PATH ์ˆ˜์ • ์—†์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๋กœ๊ทธ์•„์›ƒ/๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ ํ™•์ธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

python3-pip ๋ฅผ ํ†ตํ•ด pip3๋ฅผ ์„ค์น˜ํ•˜๊ณ  pip3 install --user pipenv pipenv๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ œ๋ชฉ ์˜ค๋ฅ˜๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ~/.profile (์ฃผ์‹, ์ˆ˜์ • ์‚ฌํ•ญ ์—†์Œ)์—์„œ ๋‹ค์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ @slhck ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์žฌ๋ถ€ํŒ…ํ–ˆ๋Š”๋ฐ ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .local/bin ๊ฐ€ ์ด์ œ PATH ์‹œ์ž‘ ๋ถ€๋ถ„์— ์žˆ๊ณ  pip3์ด ๋‹ค์‹œ ์ž‘๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ… ํ›„ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (์„ค์น˜ ํ›„: "pip3 install --user pipenv" ์‹œ์Šคํ…œ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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