Virtualenv: -재배치 κ°€λŠ₯ν•œ λŒ€μ•ˆ

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

--relocatable ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. μƒˆ 릴리슀 20.0μ—λŠ”μ΄ ν”Œλž˜κ·Έκ°€ μ—†μŠ΅λ‹ˆλ‹€. 이제 재배치 κ°€λŠ₯ν•œ ν™˜κ²½μ„ μ–΄λ–»κ²Œ μƒμ„±ν•©λ‹ˆκΉŒ?

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

rpmμ—μ„œ venvλ₯Ό λ²ˆλ“€λ§ν•˜κΈ° μœ„ν•΄ --relocatable λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. virtualenvλŠ” $ DESTDIRμ—μ„œ μƒμ„±λ˜κ³  λ§ˆμ§€λ§‰μœΌλ‘œ /opt/company μ—μ„œ μ΄λ™λ©λ‹ˆλ‹€.

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

재배치 κ°€λŠ₯ ν”Œλž˜κ·ΈλŠ” 항상 μ‹€ν—˜μ μ΄λ©° μ‹€μ œλ‘œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 더 이상 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©° κΈ°λŠ₯이 μ™„μ „νžˆ μ‚­μ œλ˜μ—ˆμŠ΅λ‹ˆλ‹€ (λ”°λΌμ„œ μ£Όμš” 릴리슀). μ‚¬μš© 사둀λ₯Ό μ„€λͺ…ν•˜λ©΄ λ‹€λ₯Έ μ ‘κ·Ό 방식을 μ œμ•ˆ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CMD export branch && cd /build_dir && \
 apt-get update -y && apt-get upgrade -y && \
 pip3 install virtualenv && \
 virtualenv --always-copy --python=python3 env && \
 git clone http://user:pass@gitlab/dev/repo.git && \
 cd /build_dir/veil-repo/code/veil-common && \
 git checkout $branch && \
 python3 install.py -p /build_dir/veil-repo/code/cli-app/ -v /build_dir/env && \
 python3 install.py -p /build_dir/veil-repo/code/controller/ -v /build_dir/env && \
 python3 install.py -p /build_dir/veil-repo/code/node/ -v /build_dir/env && \
 cd /build_dir/ && \
 ./env/bin/pip3 install -r requirements.txt && \
 virtualenv --relocatable env

이것은 Dockerfileμ—μ„œ 발췌 ν•œ κ²ƒμž…λ‹ˆλ‹€. --relocatable ν”Œλž˜κ·Έλ₯Ό μ œκ±°ν•˜λ©΄ μ½”λ“œκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•©λ‹ˆκΉŒ? 즉, μ–΄λ–€ 식 μœΌλ‘œλ“  볡사 ν•  μˆ˜μžˆλŠ” λ‚˜λ§Œμ˜ 격리 된 ν™˜κ²½μ„ λ§Œλ“€μ–΄μ•Όν•©λ‹ˆλ‹€.

도컀 λ‚΄λΆ€μ—μ„œλŠ” 90 %라고 말할 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν•΄λ‹Ή 도컀 μ½”λ“œλ₯Ό μœ μ§€ κ΄€λ¦¬ν•˜λŠ” μ‚¬λžŒκ³Ό μ—°λ½ν•΄μ•Όν•˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ 재배치 κ°€λŠ₯을 μ²˜λ¦¬ν•˜λŠ” λ°©λ²•μ˜ λ―Έλ¬˜ν•œ μ°¨μ΄κ°€μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

CI μ‹œμŠ€ν…œμ΄ κΈ΄ 이름을 가진 디렉토리에 virtualenvλ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ—μ΄ κΈ°λŠ₯을 가끔 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 이름은 #! 이 λ„ˆλ¬΄ κΈΈμ–΄ ν™˜κ²½μ—μ„œ 슀크립트λ₯Ό μ‹€ν–‰ν•  수 없을 μ •λ„λ‘œ κΈΈμ–΄μ§‘λ‹ˆλ‹€.

@ Nitori- μ΄λŸ¬ν•œ 경우 일반적으둜 도ꡬλ₯Ό ν˜ΈμΆœν•˜λŠ” python -m ν˜•μ‹μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ πŸ€”

곡정 ν•΄. λ§Žμ€ Python νŒ¨ν‚€μ§€κ°€ μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•Šκ³  자체적으둜 ν˜ΈμΆœλ˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ.

@ Nitori-이 κ²½μš°μ—λ„ λ°”μ΄λ„ˆλ¦¬ 폴더 λ‚΄μ˜ 파이썬 인터프리터λ₯Ό 톡해 μ‹€ν–‰ νŒŒμΌμ„ ν˜ΈμΆœν•˜μ—¬ 항상 κ°•μ œλ‘œ 호좜 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예

{venv}/bin/python {venv}/bin/bad-bad-tool

{venv} λŠ” μž„μ˜λ‘œ κΈΈ 수 μžˆμŠ΅λ‹ˆλ‹€ πŸ‘

우리 νšŒμ‚¬μ—μ„œλŠ” νŒŒμ΄ν”„ λΌμΈμ—μ„œ --relocatable ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ virtualenvλ₯Ό μž¬μ‚¬μš©ν•˜κ³  μ‹œκ°„μ„ μ ˆμ•½ν•©λ‹ˆλ‹€. GitLab을 μ‚¬μš©ν•˜κ³ , 초기 λ‹¨κ³„μ—μ„œ virtualenvλ₯Ό λΉŒλ“œν•˜κ³ , μ•„ν‹°νŒ©νŠΈλ‘œ μ €μž₯ ν•œ λ‹€μŒ μž¬μ‚¬μš©ν•˜μ—¬ 병렬 ν…ŒμŠ€νŠΈμ˜ 무리.

μš°λ¦¬λŠ” virtualenv 버전을 κ³ μ •ν•˜λ €κ³ ν–ˆμ§€λ§Œ λ²„κ·Έλ‘œ 인해 μ΅œμ‹  버전을 κ°€μ Έ μ™€μ„œ 였늘 μ•„μΉ¨ νŒŒμ΄ν”„ 라인이 μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 버그λ₯Ό μˆ˜μ •ν•˜μ—¬ κ³ μ •λ˜κ³  λͺ¨λ“  것이 μ§€κΈˆ μ‹€ν–‰λ˜κ³  있으며 ν”Œλž˜κ·Έκ°€ μ œκ±°λ˜λŠ” 방법을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ¬Έμ œκ°€ μ’…κ²° λ˜μ—ˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  λ‚΄ κ²½ν—˜μ„ μ „λ‹¬ν•˜κΈ° μœ„ν•΄ μ—¬κΈ°μ—μ„œ μ£Όλͺ©ν•  것이라고 μƒκ°ν–ˆμœΌλ©° μ•žμœΌλ‘œ κΉƒλ°œμ΄ 지원 될 κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ μ•± 데이터 μ‹œλ”μ—μ„œ virtualenvλ₯Ό μƒμ„±ν•˜λŠ” 데 100ms 미만이 κ±Έλ¦¬λ―€λ‘œμ΄ μ ‘κ·Ό 방식이 μ‚¬μš© μ‚¬λ‘€μ—μ„œ μ„ ν˜Έλ©λ‹ˆλ‹€.

rpmμ—μ„œ venvλ₯Ό λ²ˆλ“€λ§ν•˜κΈ° μœ„ν•΄ --relocatable λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. virtualenvλŠ” $ DESTDIRμ—μ„œ μƒμ„±λ˜κ³  λ§ˆμ§€λ§‰μœΌλ‘œ /opt/company μ—μ„œ μ΄λ™λ©λ‹ˆλ‹€.

제 κ²½μš°μž…λ‹ˆλ‹€.

그러면 생성 된 κ²½λ‘œμ— λŒ€ν•œ μ΅œμ’… λͺ©ν‘œλ₯Ό 미리 전달할 μˆ˜μžˆλŠ” 것이 도움이 λ κΉŒμš”?

@gaborbernat 예!

@gaborbernat κ·Έλž˜λ„ virtualenvλŠ” μ΅œμ’… μœ„μΉ˜μ— λ°°ν¬ν•˜κΈ° 전에 λΉŒλ“œ λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 쒋은 해결책이 무엇인지 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€ πŸ€” μ €λŠ” μ œμ•ˆμ— μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 경우 @gaborbernat μ—μ„œ ν‘œμ€€ λ™μž‘μ€ builddirκ³Ό prefixλ₯Ό κ΅¬λΆ„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

virtualenvμ—λŠ”μ΄ 경우 μ˜€ν•΄μ˜ μ†Œμ§€κ°€μžˆλŠ” DEST_DIR μΈμˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. DEST_DIR λŠ” μ‹€μ œ Venv μœ„μΉ˜λ‘œ, 사싀상 μ ‘λ‘μ‚¬μž…λ‹ˆλ‹€ (/ usr, / usr / local λ“±). λ”°λΌμ„œ virtualenv LOCATION λ¬Έμ„œν™”ν•˜λ©΄μ΄ 사싀이 더 λͺ…ν™•ν•΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€.

그런 λ‹€μŒ --destdir λ˜λŠ” --root μ˜΅μ…˜μ„ μΆ”κ°€ ν•  수 있으며 기본값은 / μž…λ‹ˆλ‹€. 이런 μ‹μœΌλ‘œ virtualenvλŠ” destdir μ—μ„œ λΆ„λ¦¬λ˜μ–΄ μž‘λ™ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (λ‹€μ†Œ chroot와 μœ μ‚¬). python, pip 및 기타 μŠ€ν¬λ¦½νŠΈκ°€μ΄ λ¬Έμ œμ— μ–΄λ–»κ²Œ λŒ€μ²˜ν•΄μ•Όν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

AFAIK λ¬Έμ œλŠ” 생성 된 λͺ¨λ“  μ½˜μ†” μŠ€ν¬λ¦½νŠΈκ°€ shebang 생성 쀑에 경둜λ₯Ό ν•˜λ“œ μ½”λ”©ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. shebang이 포함 된 생성 된 μ½˜μ†” 슀크립트λ₯Ό λΉŒλ“œν•˜λŠ” λ™μ•ˆκ³Ό 배포 ν›„ μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ λͺ¨λ‘ μž‘λ™ν•˜λ„λ‘ λ§Œλ“œλŠ” ν‘œμ€€ 방법은 μ—†μŠ΅λ‹ˆλ‹€. 그것은 λΉŒλ“œ ν›„ λˆ„κ΅°κ°€κ°€ shebangsλ₯Ό κ³ μΉ˜μ§€ μ•ŠλŠ” ν•œμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 그것은 이제 가상 ν™˜κ²½ μƒμ„±μ˜ λ²”μœ„λ₯Ό λ²—μ–΄ λ‚¬μœΌλ―€λ‘œ μš°λ¦¬κ°€ ν†΅μ œ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

@gaborbernat 당신은 μš°λ¦¬κ°€ 이것을 setuptoolsμ—μ„œ κ΅¬ν˜„ν•΄μ•Ό 함을 μ˜λ―Έν•©λ‹ˆκΉŒ? λΉŒλ“œ μ‹œκ°„κ³Ό λŸ°νƒ€μž„μ— λŒ€μƒ μœ„μΉ˜μ—μ„œ λΆ„λ¦¬ν•˜μ—¬ μ‚¬μš©ν•  μˆ˜μžˆλŠ” shebang은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

κΈ°μ‘΄ virtualenvμ—μ„œ shebangsλ₯Ό νŽΈμ§‘ν•˜μ—¬ μƒˆ μœ„μΉ˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ν•˜λŠ” virtualenv-relocate 슀크립트λ₯Ό μž‘μ„±ν•˜λ €κ³ ν•©λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 것 :

$ virtualenv-relocate /build/dir/venv /opt/company/app/venv
Rewriting shebang of bin/pip.
Rewriting shebang of bin/pip3.5.
...
$

λ‚˜λŠ” setuptoolsκ°€ 이것에도 쒋은 곳이라고 μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœ„μΉ˜ A에 λΉŒλ“œ ν•œ λ‹€μŒ μœ„μΉ˜ B에 λ°°ν¬ν•˜λŠ” λΉŒλ“œ μ‹œμŠ€ν…œμ˜ 일뢀 μ—¬μ•Όν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

음, C ν”„λ‘œμ νŠΈλŠ” λ‹¨μˆœνžˆ PATH와 LD_LIBRARY_PATHλ₯Ό νŽΈμ§‘ν•˜μ—¬ 뢄리 된 λΉŒλ“œλ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€. μ–΄λ–€ λΉŒλ“œ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜λ“  상관 μ—†μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” Cκ°€ 이것을 λ‹¬μ„±ν•˜λŠ” 방법에 μ΅μˆ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€κ°€ μ„€λͺ…ν•˜κ³  μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 이전에 무슨 일이 μžˆμ—ˆλŠ”μ§€ https://github.com/pypa/virtualenv/blob/legacy/virtualenv.py#L1880 -L1894; μš°λ¦¬λŠ” 기본적으둜 μŠ€ν¬λ¦½νŠΈμ™€ pth / egg 파일과 같은 μƒλŒ€μ μΈ 경둜λ₯Ό λ§Œλ“€λ €κ³  λ…Έλ ₯ν•΄ μ™”μŠ΅λ‹ˆλ‹€.

λ‚΄ μ €μž₯μ†Œλ„ --relocatable을 μ‚¬μš©ν•˜κ³  있으며 재배치 κ°€λŠ₯ν•œ 가상 ν™˜κ²½μ΄ 생성 된 ν›„ 슀크립트λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ 라이브러리λ₯Ό virtualenv에 λ³΅μ‚¬ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ™„μ „νžˆ 재배치 κ°€λŠ₯ν•œ virtualenvλ₯Ό 생성 ν•  μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μš°λ¦¬λŠ” 이것을 Windowsμ—μ„œ μ‚¬μš©ν•˜κ³  μ„€μΉ˜ ν”„λ‘œκ·Έλž¨μ— virtualenvλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μ„€μΉ˜ ν›„ python3 ν”„λ‘œκ·Έλž¨μ€ νŒ¨ν‚€μ§€ 된 virtualenvμ—μ„œ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λ™μΌν•œ μ‚¬μš© μ‚¬λ‘€λŠ” Macκ³Ό Linuxμ—μ„œλ„ μž‘λ™ν•©λ‹ˆλ‹€ ....

@ Gagi2k κ±°κΈ°μ—μ„œν•˜λŠ” 일은 이미 ν˜„μž¬ 재배치 κ°€λŠ₯ν•œ κ΅¬ν˜„μ˜ 취약성을 λ³΄μ—¬μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. envλ₯Ό μ™„μ „νžˆ 재배치 ν•  수 μžˆλ„λ‘ λ§Œλ“  ν›„ λͺ‡ 가지 μΆ”κ°€ 슀크립트λ₯Ό μˆ˜ν–‰ν•΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” νŒ¨ν‚€μ§€λ₯Ό μ™„μ „νžˆ 재배치 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 방법이 λŒ€μƒ ν™˜κ²½μ— 크게 μ˜μ‘΄ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ”°λΌμ„œ μ—¬κΈ°μ„œ μ•„μ΄λ””μ–΄λŠ” virtualenv μžμ²΄κ°€ ν™˜κ²½μ„ μ™„μ „νžˆ 재배치 ν•  수 μžˆλ„λ‘ν•˜λŠ” 것을 ν¬κΈ°ν•˜κ³  (λ§Žμ€ κ²½μš°μ—μ„œ 성곡할 수 μ—†κΈ° λ•Œλ¬Έμ—) ... λŒ€μ‹ μ΄ μ‚¬μš©μž 지정 슀크립트λ₯Ό μž‘μ„±ν•˜λŠ” μ‚¬λžŒλ“€μ—κ²Œ μž‘μ—…μ„ μœ„μž„ν•˜μ—¬μ΄λ₯Ό λ‹¬μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λŒ€μƒ ν™˜κ²½μ— λŒ€ν•œ μ§€μ‹μ΄μžˆλŠ” μŠ€ν¬λ¦½νŠΈμ΄λ―€λ‘œ 재배치 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” 데 ν•„μš”ν•œ 사항과 λ³€κ²½ 사항을 μ •ν™•νžˆ μ•Œκ³  μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

사싀, κ³΅μ •ν•œ μš”μ .

λ‚΄ λ¬Έμ œλŠ” 이전에 제곡 ν•œ κΈ°λŠ₯을 λ‹€μ‹œ λ§Œλ“€κ³  λͺ¨λ“  ν”Œλž«νΌ + μ—¬λŸ¬ λ°°ν¬νŒμ—μ„œ ν…ŒμŠ€νŠΈν•˜μ—¬ 이전 κΈ°λŠ₯κ³Ό λ˜‘κ°™μ€ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Όν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” λ‚˜ λ˜λŠ” λ‹€λ₯Έ λˆ„κ΅°κ°€κ°€ 이것을 κ΅¬ν˜„ν•  μ‹œκ°„μ„ κ°€μ§ˆ λ•ŒκΉŒμ§€ μ§€κΈˆμ€ 이전 virtualenv 버전을 κ³ μˆ˜ν•˜λ €κ³  λ…Έλ ₯ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€.

@ Gagi2k virtualenv-relocate ν”„λ‘œμ νŠΈ 아이디어에 λŒ€ν•œ μœ„μ˜ μ˜κ²¬μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. λ‹€λ₯Έ μ‚¬λžŒκ³Ό ν˜‘λ ₯ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€. https://github.com/spotify/dh-virtualenv/ κ°€ 쒋은 좜발점이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

@bersace thx, λ‚˜λŠ” 이미 이전 μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜μ—¬ λ…λ¦½ν˜• 파이썬 슀크립트λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆμ€ λ“œλ‘­ 인 μ†”λ£¨μ…˜μœΌλ‘œ μ‚¬μš©ν•  것 κ°™μ§€λ§Œ λ‚˜μ€‘μ— λ‹€λ₯Έ κ²ƒμœΌλ‘œ μ „ν™˜ν•˜κ±°λ‚˜ λ‚΄κ°€ κ°€μ§€κ³ μžˆλŠ” 슀크립트λ₯Ό μ œκ³΅ν•˜κ²Œλ˜μ–΄ κΈ°μ©λ‹ˆλ‹€.

@ Gagi2k 곡유 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

@bersace 아직 진행 μ€‘μž…λ‹ˆλ‹€ : https://codereview.qt-project.org/c/qt/qtivi/+/290859

전체 virtualenv 20 μ—…λ°μ΄νŠΈλ‘œ 인해 μ˜ˆμƒλ³΄λ‹€ 훨씬 λ§Žμ€ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€. 슀크립트λ₯Ό 재배치 ν•  수 μžˆλ„λ‘ 이전 κΈ°λŠ₯을 μž¬μ‚¬μš©ν•˜λŠ” 것은 큰 λ¬Έμ œκ°€ μ•„λ‹ˆμ§€λ§Œ 이제 venvλ₯Ό κΈ°λ°˜μœΌλ‘œν•˜κ³  pyvenv.cfgλ₯Ό μ‚¬μš©ν•˜λ©΄ 훨씬 더 λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ Windowsμ—μ„œ 였래된 virtualenvλŠ” λ§Žμ€ κΈ°λ³Έ py νŒŒμΌμ„/ lib / python(λ˜λŠ” 심볼릭 링크). 이제 그듀은 μ „ν˜€ λ³΅μ‚¬λ˜μ§€ μ•Šμ§€λ§Œ pyvenvλŠ” μ›λž˜ μœ„μΉ˜λ₯Ό 가리 ν‚΅λ‹ˆλ‹€. μ›λž˜ μœ„μΉ˜κ°€ μ—…λ°μ΄νŠΈλ˜λ©΄ virtualenv가이λ₯Ό μ²˜λ¦¬ν•΄μ•Όν•˜κ³  ν•„μš”ν•œ λͺ¨λ“  것이 μ—¬μ „νžˆ μ œμžλ¦¬μ— 있기λ₯Ό λ°”λžλ‹ˆλ‹€. 더 큰 λ¬Έμ œλŠ” https://bugs.python.org/issue39469 μ΄λ―€λ‘œ virtualenvλ₯Ό 재배치 ν•  수 μžˆλ„λ‘ λͺ¨λ“  것을 μ„€μ •ν•˜λŠ” μƒλŒ€ μœ„μΉ˜λ₯Ό μ „λ‹¬ν•˜κΈ°κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ€ pyvenv.cfgκ°€ μ§€μ›ν•˜μ§€ μ•Šκ³ λŠ” ν•  수 μžˆλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@gaborbernat λ‚˜λŠ” 그것이 μ›λž˜ μ˜λ„ ν•œλŒ€λ‘œ virtualenvλ₯Ό μ˜€μš©ν•˜κ³ μžˆμ„ 수 μžˆμ§€λ§Œ, μ‚¬λžŒλ“€μ΄ pipλ₯Ό μ‚¬μš©ν•˜μ—¬ ν™•μž₯ ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•˜κ³  싢을 λ•Œ μžμ‹ μ˜ python3 사본을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ œκ³΅ν•˜λŠ” 곡식적인 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@ Gagi2k λ‚˜λŠ” μ—¬κΈ°μ„œ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆλ‹€κ³  ν™•μ‹ ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 주어진 μ‹œμŠ€ν…œμ—μ„œ μ„€μΉ˜ λ‹¨κ³„μ˜ μΌλΆ€λ‘œ pyenv.cfg hone 만 λ³€κ²½ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆκΉŒ?

@gaborbernat λ‚˜λŠ” 그것이 μ›λž˜ μ˜λ„ ν•œλŒ€λ‘œ virtualenvλ₯Ό μ˜€μš©ν•˜κ³ μžˆμ„ 수 μžˆμ§€λ§Œ, μ‚¬λžŒλ“€μ΄ pipλ₯Ό μ‚¬μš©ν•˜μ—¬ ν™•μž₯ ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•˜κ³  싢을 λ•Œ μžμ‹ μ˜ python3 사본을 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ œκ³΅ν•˜λŠ” 곡식적인 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

가상 ν™˜κ²½μ€ 항상 μ»΄ν“¨ν„°μ˜ 일뢀 파이썬 인터프리터에 λŒ€ν•œ μ°Έμ‘°κ°€λ˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΈ°λ³Έ 가정은 컴퓨터에 μ™„μ „νžˆ μž‘λ™ν•˜λŠ” Python ν™˜κ²½μ΄ 있고 λ³„λ„μ˜ site-packages μ—¬λŸ¬ 개λ₯Ό μ›ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 링크λ₯Ό μ™„μ „νžˆ λͺ…μ‹œ 적이 지 μ•Šκ²Œ λ§Œλ“œλŠ” 데 일뢀 κ°€μΉ˜κ°€ μžˆμŒμ„ μ•Œ 수 μžˆμ§€λ§Œ (ν˜„μž¬ μ™„μ „νžˆ λͺ…μ‹œμ μΈ κ²½λ‘œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ) κ·Έ 경둜 λ₯Ό λ”°λΌκ°€λŠ” κ²½μš°μ—λŠ” λκΉŒμ§€ κ°€μ„œ pex λ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ“œλ₯Ό νŒ¨ν‚€μ§•ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. μ°Έμ‘°λ₯Ό μ‰½κ²Œ κΉ¨λœ¨λ¦¬μ§€ μ•Šκ³  파이썬 μ‹€ν–‰ νŒŒμΌμ„ 미리?

@gaborbernat λ¬Όλ‘  μž‘λ™ν•©λ‹ˆλ‹€. κ°€μž₯ 큰 λ¬Έμ œλŠ” λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžκ°€ μ„€μΉ˜ ν›„ 폴더 이름을 λ°”κΏ€ 수 있으며 계속 μž‘λ™ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.
ν•˜μ§€λ§Œ 방금 PYTHONHOME 섀정이 νŠΈλ¦­μ„ μˆ˜ν–‰ν•œλ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. μ΅œμ†Œν•œ μ›λž˜ μ„€μΉ˜λ₯Ό μ°Έμ‘°ν•˜μ§€ μ•Šκ³  μž‘λ™ν•˜λŠ” Windowsμ—μ„œ.

pexλŠ” ν₯λ―Έλ‘œμ›Œ 보이며 힌트λ₯Ό μœ„ν•΄ 더 μžμ„Ένžˆ μ‚΄νŽ΄λ³Ό κ²ƒμž…λ‹ˆλ‹€.

@gaborbernat μ—¬μ „νžˆ,

@gaborbernat λ¬Όλ‘  μž‘λ™ν•©λ‹ˆλ‹€. κ°€μž₯ 큰 λ¬Έμ œλŠ” λŒ€λΆ€λΆ„μ˜ μ‚¬μš©μžκ°€ μ„€μΉ˜ ν›„ 폴더 이름을 λ°”κΏ€ 수 있으며 계속 μž‘λ™ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ™œ 그듀이 이것을 κΈ°λŒ€ν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 이것은 κ²°μ½” 사싀이 μ•„λ‹™λ‹ˆλ‹€. 재배치 κ°€λŠ₯ ν”Œλž˜κ·Έλ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ κ°€λŠ₯ν•œ 경우의 ν•˜μœ„ μ§‘ν•©μ—μ„œ μ‚¬μ‹€μ΄μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ v20으둜 도끼가 된 μ΄μœ μž…λ‹ˆλ‹€.

@gaborbernat μ—¬μ „νžˆ,

@bersace 이것은 λ§Žμ€ μ‚¬μš© 사둀에 따라 λ‹€λ¦…λ‹ˆλ‹€. deb / rpm은 Python이 λŒ€μƒ λ¨Έμ‹ μ˜ λ™μΌν•œ μœ„μΉ˜μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€λŠ” 것을 보μž₯ν•©λ‹ˆκΉŒ? κ·Έλ ‡λ‹€λ©΄ μ„€μΉ˜ 쀑에 shebang 경둜λ₯Ό μˆ˜μ •ν•˜μ‹­μ‹œμ˜€ πŸ‘

μ‹œμŠ€ν…œ νŒŒμ΄μ¬μ— 따라 @gaborbernat λŠ” 파이썬이 νŠΉμ • μœ„μΉ˜μ— μžˆλŠ”μ§€ ν™•μΈν•˜κΈ°μ— μΆ©λΆ„ν•©λ‹ˆλ‹€.

postinst에 μ„€μΉ˜λœ νŒŒμΌμ„ μˆ˜μ •ν•˜λŠ” 것은 맀우 λ‚˜μœ μƒκ°μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ €λ©΄ dpkg μ˜μ—­μ—μ„œ λͺ¨λ“  슀크립트λ₯Ό μ œμ™Έν•΄μ•Όν•˜λ―€λ‘œ dpkgλŠ” μ—…κ·Έλ ˆμ΄λ“œμ‹œ ν•΄λ‹Ή 슀크립트λ₯Ό κ±΄λ“œλ¦¬μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 그건 μš©λ‚©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

AFIAK, μ΅œμƒμ˜ μ†”λ£¨μ…˜μ€ μ΅œμ’… νŒ¨ν‚€μ§€λ₯Ό λ³΄κ΄€ν•˜κΈ° 전에 싀행될 destdir λ₯Ό μ œκ±°ν•˜κΈ° μœ„ν•΄ λͺ¨λ“  shebangsλ₯Ό νŽΈμ§‘ν•˜λŠ” virtualenv-change-prefix μž…λ‹ˆλ‹€.

@bersace 와

@gaborbernat λŠ” μ ˆλŒ€ λŒ€μƒ μœ„μΉ˜μž…λ‹ˆλ‹€. 예 : #!/opt/company/app/venv/bin/python .

이제 / μ΄μ™Έμ˜ μƒˆ refroot에 ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό λ°°ν¬ν•˜λŠ” 것이 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@gaborbernat 예, μ˜λ„μ μœΌλ‘œ. dpkg / rpmμ—μ„œ κ΄€λ¦¬ν•˜λŠ” νŒŒμΌμ€ μ‚¬μš©μžκ°€ μ΄λ™ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

이것은 relocatable λ‹€μ†Œ λ‹€λ¦…λ‹ˆλ‹€. λͺ©μ μ€ venvλ₯Ό relative 둜 λ§Œλ“œλŠ” 것이 μ•„λ‹ˆλΌ builddir (debian / build / ... λ˜λŠ” % builddir)κ³Ό rundir (/)을 κ΅¬λ³„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

우리μͺ½μ—λŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ ν•­λͺ©μ΄ μ—†κΈ° λ•Œλ¬Έμ— 이것을 λ‹«μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ 계속 λ…Όμ˜ν•˜κ±°λ‚˜ virtualenvμ—μ„œμ΄ 문제λ₯Ό ν•΄κ²°ν•˜λ €λŠ” 잠재적 인 ν”„λ‘œμ νŠΈμ— λŒ€ν•΄ λ…Όμ˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

사싀, λŒ€μ•ˆμ€ 버전 관리없이 μ–΄λŠ 정도 곡급 업체 쒅속성에 λŒ€ν•œ κ²ƒμž…λ‹ˆλ‹€.

ν•„μžμ˜ κ²½μš°λŠ” λΆ„μ‚° 슀파크 ν΄λŸ¬μŠ€ν„° λ‚΄ ν”„λ‘œκ·Έλž¨μ˜ 싀행을 μ§€μ›ν•˜λŠ” 데 ν•„μš”ν•œ 쒅속성 파이썬 νŒ¨ν‚€μ§€λ₯Ό μ••μΆ•ν•˜μ—¬ 원사에 μŠ€νŒŒν¬μ— 'μ•„μΉ΄μ΄λΈŒ'둜 μ „λ‹¬ν•΄μ•Όν•©λ‹ˆλ‹€. 이 μž‘μ—…μ€ Anacondaμ—μ„œ μ™„λ£Œ ν•  수 μžˆμ§€λ§Œ νšŒμ‚¬μ—μ„œλŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. relocatable 은 (λŠ”) κ³Όκ±°μ—λŠ”μ΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμ§€λ§Œ μ§€κΈˆμ€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” ν•„μš”ν•œ μ’…μ†μ„±μ΄μžˆλŠ” Python νŒ¨ν‚€μ§€λ₯Ό μ••μΆ•ν•˜κ³  λΆ„μ‚° Spark ν΄λŸ¬μŠ€ν„°μ—μ„œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ Spark on Yarn에 'μ•„μΉ΄μ΄λΈŒ'둜 μ „λ‹¬ν•΄μ•Όν•©λ‹ˆλ‹€. 이 μž‘μ—…μ€ Anacondaμ—μ„œ μ™„λ£Œ ν•  수 μžˆμ§€λ§Œ νšŒμ‚¬μ—μ„œλŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. relocatable 은 (λŠ”) κ³Όκ±°μ—λŠ”μ΄ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμ§€λ§Œ μ§€κΈˆμ€ μ‚¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€.

@jackhhh λ‹˜ , κΈ°μ‘΄ μ‚¬μš© 사둀에 λŒ€ν•œ ν•΄κ²° 방법을 μ°Ύμ•˜μŠ΅λ‹ˆκΉŒ?
μš°λ¦¬λŠ” 같은 λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

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