Virtualenv: pipx.y λˆ„λ½, λŒ€μ‹  pip-xy 있음

에 λ§Œλ“  2020λ…„ 03μ›” 15일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: pypa/virtualenv

λ°œν–‰λ¬Ό

virtualenv 20.0.10μ—μ„œ 적어도 virtualenv ν™˜κ²½μ΄ 생성 될 λ•Œ pip μ£Ό 버전 파일의 λͺ…λͺ… κ·œμΉ™μ΄ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

16.7.xμ—μ„œ μžˆμ—ˆλ‹€ pip3.7 20.0.2이가 λ³€κ²½ pip-3.7 μ—¬μ „νžˆ μ‘΄μž¬ν•˜μ§€λ§Œ pip3 μ‘°ν•­ μ—¬λŸ¬ ν™˜κ²½ 및 λΉŒλ“œλ₯Ό μžλ™ν™” νŒ¨ν„΄μ˜ μΈ‘λ©΄μ—μ„œ λͺ¨λ‘, pip${MAJOR_VERSION} νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” λΉŒλ“œ 쒅속성이 λ§Žμ΄μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ 이전 λͺ…λͺ… κ·œμΉ™μ„ μ€€μˆ˜ν•˜κΈ° μœ„ν•΄ 심볼릭 링크λ₯Ό μΆ”κ°€ν•˜λ©΄ λ§Žμ€ μ‚¬λžŒλ“€μ΄ 디버깅에 λ§Žμ€ μ‹œκ°„μ„ μ†ŒλΉ„ν•˜μ§€ λͺ»ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν™˜κ²½

  • 운영체제 : CentOS 8
  • OS Python : Python 3.6.8
  • virtualenv에 μ‚¬μš©λ˜λŠ” python μΈν„°ν”„λ¦¬ν„°λŠ” μ†ŒμŠ€μ—μ„œ 컴파일 된 Python 3.7.6μž…λ‹ˆλ‹€.
  • μ‹œμŠ€ν…œ 핍 λͺ©λ‘
pip list --format=columns

Package             Version
------------------- -------
appdirs             1.4.3
asn1crypto          0.24.0
cffi                1.11.5
configobj           5.0.6
cryptography        2.3
dbus-python         1.2.4
decorator           4.2.1
distlib             0.3.0
filelock            3.0.12
gpg                 1.10.0
idna                2.5
importlib-metadata  1.5.0
importlib-resources 1.3.1
iniparse            0.4
isc                 2.0
netifaces           0.10.6
pciutils            2.3.6
perf                0.1
pip                 9.0.3
ply                 3.9
pycparser           2.14
pygobject           3.28.3
pyOpenSSL           18.0.0
pyparsing           2.1.10
python-dateutil     2.6.1
python-dmidecode    3.12.2
python-linux-procfs 0.6
pyudev              0.21.0
rhnlib              2.8.6
rpm                 4.14.2
schedutils          0.6
selinux             2.9
sepolicy            1.1
setools             4.2.2
setuptools          39.2.0
six                 1.11.0
slip                0.6.4
slip.dbus           0.6.4
syspurpose          1.25.17
zipp                3.1.0

λ‚³λ‹€

cd /opt
pip install virtualenv==20.0.10

pip list --format=columns | grep virtualenv
virtualenv          20.0.10

virtualenv --python=/opt/python_virtualenv/versions/3.7.6/bin/python3.7 venv_20.0.10

ls -al /opt/venv_20.0.10/bin | grep pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip3
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip-3.7

pip uninstall virtualenv
pip install virtualenv==16.7.10
virtualenv --python=/opt/python_virtualenv/versions/3.7.6/bin/python3.7 venv_16.7.10

ls -al /opt/venv_16.7.10/bin | grep pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3.7
ls -al /opt/venv_20.0.10/bin
total 68
drwxr-xr-x. 2 root root 4096 Mar 15 14:08 .
drwxr-xr-x. 4 root root 4096 Mar 15 14:08 ..
-rw-r--r--. 1 root root 2206 Mar 15 14:08 activate
-rw-r--r--. 1 root root 1425 Mar 15 14:08 activate.csh
-rw-r--r--. 1 root root 3056 Mar 15 14:08 activate.fish
-rw-r--r--. 1 root root 1751 Mar 15 14:08 activate.ps1
-rw-r--r--. 1 root root 1199 Mar 15 14:08 activate_this.py
-rw-r--r--. 1 root root 1147 Mar 15 14:08 activate.xsh
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install3
-rwxr-xr-x. 1 root root  242 Mar 15 14:08 easy_install-3.7
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip3
-rwxr-xr-x. 1 root root  233 Mar 15 14:08 pip-3.7
lrwxrwxrwx. 1 root root   51 Mar 15 14:08 python -> /opt/python_virtualenv/versions/3.7.6/bin/python3.7
lrwxrwxrwx. 1 root root    6 Mar 15 14:08 python3 -> python
lrwxrwxrwx. 1 root root    6 Mar 15 14:08 python3.7 -> python
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel3
-rwxr-xr-x. 1 root root  220 Mar 15 14:08 wheel-3.7


ls -al /opt/venv_16.7.10/bin
total 15360
drwxr-xr-x. 2 root root     4096 Mar 15 14:10 .
drwxr-xr-x. 5 root root     4096 Mar 15 14:10 ..
-rw-r--r--. 1 root root     2206 Mar 15 14:10 activate
-rw-r--r--. 1 root root     1425 Mar 15 14:10 activate.csh
-rw-r--r--. 1 root root     3090 Mar 15 14:10 activate.fish
-rw-r--r--. 1 root root     1751 Mar 15 14:10 activate.ps1
-rw-r--r--. 1 root root     1517 Mar 15 14:10 activate_this.py
-rw-r--r--. 1 root root     1147 Mar 15 14:10 activate.xsh
-rwxr-xr-x. 1 root root      245 Mar 15 14:10 easy_install
-rwxr-xr-x. 1 root root      245 Mar 15 14:10 easy_install-3.7
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3
-rwxr-xr-x. 1 root root      236 Mar 15 14:10 pip3.7
lrwxrwxrwx. 1 root root        9 Mar 15 14:10 python -> python3.7
lrwxrwxrwx. 1 root root        9 Mar 15 14:10 python3 -> python3.7
-rwxr-xr-x. 1 root root 15664944 Mar 15 14:10 python3.7
-rwxr-xr-x. 1 root root     2335 Mar 15 14:10 python-config
-rwxr-xr-x. 1 root root      223 Mar 15 14:10 wheel

λͺ¨λ“  4 λŒ“κΈ€

이것은 슀크립트 생성을 μ²˜λ¦¬ν•˜λŠ” ν‘œμ€€ 라이브러리λ₯Ό μ±„νƒν•œ λΆ€μž‘μš© μž…λ‹ˆλ‹€. 여기에 슀크립트 λ³€ν˜•μ΄ μΆ”κ°€λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ—¬κΈ° pipλŠ” λ‚˜λ¨Έμ§€μ— λΉ„ν•΄ μ΄μƒν•œ μΌμ„ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. Linux 배포판이 일을 μ²˜λ¦¬ν•˜λŠ” 방법과 파이썬 μžμ²΄κ°€ 버전을 μ²˜λ¦¬ν•˜λŠ” 방법과 일치 ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • μ—¬κΈ°λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€ https://github.com/pypa/pip/blob/master/setup.py#L79 -L81, pipλŠ” pipx.y ν˜•μ‹μ„ ν•˜λ“œ μ½”λ”©ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ½˜μ†” μŠ€ν¬λ¦½νŠΈκ°€ λΉŒλ“œμ‹œ μž‘μ„±λ˜λ―€λ‘œ μ•½κ°„ λ²—μ–΄λ‚©λ‹ˆλ‹€. λ”°λΌμ„œ λ²”μš© 휠의 경우 λ‹€λ₯Έ Python에 μ„€μΉ˜ν•˜λŠ” 경우 (예 : 3.8둜 λΉŒλ“œ 된 휠, 2.7에 μ„€μΉ˜) pipλŠ” λŒ€μƒ Python 버전에 맞게 버전 번호λ₯Ό λ‹€μ‹œ μž‘μ„±ν•΄μ•Όν•©λ‹ˆλ‹€. μ–΄λ–»κ²Œ λ“  μ½˜μ†” 슀크립트 맀핑 내에 μ •μ˜ 된 λ‚΄μš©μ„ μ‘΄μ€‘ν•˜μ§€ μ•Šκ³  이름을 λ³€κ²½ν•©λ‹ˆλ‹€. 특히 pipx.y ν˜•μ‹λ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • distlibλŠ” https://bitbucket.org/pypa/distlib/commits/eedb3ae9233562e970dab2212892969bd87be01c에 따라 pip-x.y ν˜•μ‹μ„ μ„ ν˜Έν•©λ‹ˆλ‹€.
  • setuptoolsλŠ” pip-x.y ν˜•μ‹λ„ μ„ ν˜Έν•©λ‹ˆλ‹€. https://github.com/pypa/setuptools/blob/master/setup.py#L46 -L47 μ°Έμ‘°
  • νœ μ€ 버전이 μ§€μ •λœ μ‹€ν–‰ νŒŒμΌμ„ μ „ν˜€ μ •μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. https://github.com/pypa/wheel/blob/master/setup.cfg#L49 μ°Έμ‘°

도ꡬ가 버전이 μ§€μ •λœ 슀크립트λ₯Ό μ •μ˜ν•˜λŠ” 방법과 ν”„λŸ°νŠΈ μ—”λ“œκ°€ μ›ν•˜λŠ” λ°±μ—”λ“œμ™€ 톡신 ν•  μˆ˜μžˆλŠ” 방법을 ν‘œμ€€ν™”ν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ ν”„λ‘ νŠΈ μ—”λ“œ μ˜΅μ…˜μ΄μ–΄μ•Όν•©λ‹ˆκΉŒ? @pfmoore @pradyunsg 생각은 μ–΄λ”˜κ°€μ— PEP-517의 μΌλΆ€κ°€λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ πŸ€·β€β™‚

μ§€κΈˆμ€ pipx.y 및 pip-x.y 도 μƒμ„±ν•˜λŠ” 것이 ν•΄κ²° 방법이라고 μƒκ°ν•©λ‹ˆλ‹€.

도ꡬ가 버전이 μ§€μ •λœ 슀크립트λ₯Ό μ •μ˜ν•˜λŠ” 방법과 ν”„λŸ°νŠΈ μ—”λ“œκ°€ μ›ν•˜λŠ” λ°±μ—”λ“œμ™€ 톡신 ν•  μˆ˜μžˆλŠ” 방법을 ν‘œμ€€ν™”ν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€.

이것은 기본적으둜 μƒν™©μž…λ‹ˆλ‹€.

Pip은 distlib와 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 버전을 μƒμ„±ν•©λ‹ˆλ‹€. distlib둜 μ „ν™˜ν•˜κΈ° 전에 pipκ°€ μ‚¬μš©ν–ˆλ˜ ν˜•μ‹μ΄κ³  이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ΄ 문제 μ˜€κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ (IIRC).

μž₯기적인 μ†”λ£¨μ…˜μ˜ 경우 μ΄λŠ” μ•„λ§ˆλ„ ν‘œμ€€ν™”λ˜μ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€ (μ‹€μ œλ‘œ 전체 console-scripts λ©”μ»€λ‹ˆμ¦˜μ΄ ν‘œμ€€ν™”λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œμ΄ μ˜μ—­ 전체λ₯Ό λ‹€λ£¨λŠ” μƒˆλ‘œμš΄ PEPκ°€ ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€).

μ•ˆλ…•ν•˜μ„Έμš”,이 λ¬Έμ œμ— λŒ€ν•œ μˆ˜μ • 사항은 virtualenv 20.0.11을 톡해 λ¦΄λ¦¬μŠ€λ˜μ—ˆμŠ΅λ‹ˆλ‹€. https://pypi.org/project/virtualenv/20.0.11/(https://virtualenv.pypa.io/en/latest/changelog.html#v20-0-11-2020-03-18)을 μ°Έμ‘° ν•˜μ‹­μ‹œμ˜€ . λ¬Έμ œκ°€ ν•΄κ²°λ˜μ§€ μ•Šμ€ 경우 λ‹€μ‹œ μ‹œλ„ν•˜κ³ λ³΄κ³ ν•˜μ‹­μ‹œμ˜€. 그렇지 μ•Šμ€ 경우 여기에 μ˜κ²¬μ„ 남겨 μ£Όμ‹œλ©΄ 티켓을 λ‹€μ‹œ μ—΄μ–΄ λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€. 이둜 인해 λΆˆνŽΈμ„ 끼쳐 λ“œλ € μ£„μ†‘ν•˜λ©° 이번 μƒˆλ‘œμš΄ μ£Όμš” λ¦΄λ¦¬μŠ€μ—μ„œ μ˜ˆμƒμΉ˜ λͺ»ν•œ 버그λ₯Ό ν•΄κ²°ν•˜λŠ” λ™μ•ˆ κΈ°λ‹€λ € μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
thanks

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰