[μ„€μΉ˜] pipenv둜 pyenv 뽕 뽑기

Posted by Euisuk's Dev Log on April 27, 2024

[μ„€μΉ˜] pipenv둜 pyenv 뽕 뽑기

원본 κ²Œμ‹œκΈ€: https://velog.io/@euisuk-chung/pipenv-λ„ˆλ„-같이-였고-pyenv-pipenv

μ§€λ‚œ 번 ν¬μŠ€νŒ…μ—μ„œλŠ” pyenv에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄κ³  이λ₯Ό λ¦¬λˆ…μŠ€ ν™˜κ²½(+Windowν™˜κ²½)에 μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ΄€λŠ”λ°μš”(링크) 이번 ν¬μŠ€νŒ…μ—μ„œλŠ” pyenv의 효과λ₯Ό κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” pipenv에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄κ³ , 이λ₯Ό μ–΄λ–»κ²Œ μ‚¬μš©ν• μ§€ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€ πŸ€—

1. pipenvλž€?

  • μ •μ˜: pipenvλŠ” 파이썬의 μ˜μ‘΄μ„± 관리와 가상 ν™˜κ²½μ„ ν†΅ν•©μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. 이 λ„κ΅¬λŠ” Pipfileκ³Ό Pipfile.lock νŒŒμΌμ„ μ΄μš©ν•˜μ—¬ μ˜μ‘΄μ„±μ„ λͺ…μ‹œν•˜κ³ , ν”„λ‘œμ νŠΈλ§ˆλ‹€ λ…λ¦½λœ 가상 ν™˜κ²½μ„ μƒμ„±ν•˜μ—¬ κ΄€λ¦¬ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 개발 ν™˜κ²½μ˜ 일관성과 μž¬ν˜„μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€.

2. pipenv μ„€μΉ˜ 방법

  • pipenv μ„€μΉ˜:
    1
    
    pip install pipenv
    

    이 λͺ…령은 μ‹œμŠ€ν…œμ— pipenvλ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. νŠΉμ • μ‚¬μš©μžμ— κ΅­ν•œν•˜μ§€ μ•Šκ³  μ‹œμŠ€ν…œ 전체에 μ„€μΉ˜λ©λ‹ˆλ‹€.

3. pipenv 가상 ν™˜κ²½ 생성 및 관리

  • (μ°Έκ³ ) λ‚΄ PyENV ν™˜κ²½μ— μ„€μΉ˜λœ 파이썬 버전 리슀트 ν™•μΈν•˜κΈ°

    1
    
    pyenv versions # check installed envs
    
  • 가상 ν™˜κ²½ 생성:

    1
    2
    3
    
    mkdir MyProject
    cd MyProject
    pipenv --python 3.9.1
    

    이 λͺ…령은 ν”„λ‘œμ νŠΈ 디렉토리 내에 Pipfile을 μƒμ„±ν•˜κ³  μ§€μ •λœ 파이썬 λ²„μ „μœΌλ‘œ 가상 ν™˜κ²½μ„ μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€.

  • 가상 ν™˜κ²½ ν™œμ„±ν™” 및 λΉ„ν™œμ„±ν™”:

    1
    2
    
    pipenv shell   # ν™œμ„±ν™”
    exit           # λΉ„ν™œμ„±ν™”
    
  • pyenvμ™€μ˜ 연동:

    • μ‹œμŠ€ν…œμ— μ›ν•˜λŠ” 파이썬 버전이 μ—†λŠ” 경우, pipenvλŠ” pyenvλ₯Ό 톡해 μžλ™μœΌλ‘œ ν•΄λ‹Ή 버전을 μ„€μΉ˜ν•˜λ„λ‘ μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. Pipfile?

Pipfile은 일반적으둜 ν”„λ‘œμ νŠΈμ˜ 루트 디렉토리에 μœ„μΉ˜ν•˜κ²Œ λ©λ‹ˆλ‹€. 이 νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ™€ κ΄€λ ¨λœ 파이썬 μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ£Όμš” 파일둜, ν”„λ‘œμ νŠΈ 폴더에 직접 μƒμ„±λ©λ‹ˆλ‹€.

  • Pipfile의 μœ„μΉ˜: Pipfile은 ν”„λ‘œμ νŠΈ 폴더 μ•ˆμ— μœ„μΉ˜ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν”„λ‘œμ νŠΈ 폴더가 MyProject라면, MyProject/Pipfile에 μœ„μΉ˜ν•˜κ²Œ λ©λ‹ˆλ‹€.
  • Pipfile의 ν™•μž₯자: Pipfile은 ν™•μž₯자 없이 κ·Έλƒ₯ Pipfile둜 μ €μž₯λ©λ‹ˆλ‹€. μ΄μ™€λŠ” λ³„κ°œλ‘œ, μ˜μ‘΄μ„±μ„ κ³ μ •ν•˜λŠ” Pipfile.lock νŒŒμΌλ„ 같은 폴더에 μƒμ„±λ˜λ©°, 이 파일 μ—­μ‹œ ν™•μž₯μžκ°€ μ—†μŠ΅λ‹ˆλ‹€.
  • Pipfileκ³Ό Pipfile.lock의 μ‚¬μš©:

    • Pipfile: ν”„λ‘œμ νŠΈμ— ν•„μš”ν•œ νŒ¨ν‚€μ§€μ™€ 파이썬 버전을 μ„ μ–Έμ μœΌλ‘œ λͺ…μ‹œν•©λ‹ˆλ‹€.
    • Pipfile.lock: pipenv lock λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μƒμ„±λ˜λ©°, 이 νŒŒμΌμ€ Pipfile의 μ„ μ–Έλœ μ˜μ‘΄μ„±μ— λŒ€ν•œ ꡬ체적인 버전 정보와 ν•΄μ‹œκ°’μ„ ν¬ν•¨ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ„ 톡해 ν”„λ‘œμ νŠΈκ°€ λ‹€λ₯Έ μ‹œμŠ€ν…œμ—μ„œ λ™μΌν•˜κ²Œ μž¬ν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • Lock 파일 생성 및 μ‚¬μš© μ˜ˆμ‹œ:

    1
    2
    
    pipenv install numpy  # numpy μ„€μΉ˜
    pipenv lock           # Pipfile.lock 생성 및 μ—…λ°μ΄νŠΈ
    

    ν”„λ‘œμ νŠΈλ₯Ό λ°°ν¬ν•˜κ±°λ‚˜ λ‹€λ₯Έ 개발 ν™˜κ²½μ—μ„œ μž‘μ—…μ„ μž¬κ°œν•  λ•Œ Pipfile.lock을 μ‚¬μš©ν•˜μ—¬ μ •ν™•νžˆ 같은 μ˜μ‘΄μ„±μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

5. pipenv lock?

βœ”οΈ pipenv lock λͺ…λ Ήμ˜ μ—­ν• 

  • 쒅속성 잠금: pipenv lock은 Pipfile에 λͺ…μ‹œλœ 쒅속성을 기반으둜 Pipfile.lock νŒŒμΌμ„ μƒμ„±ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 이 νŒŒμΌμ€ ν”„λ‘œμ νŠΈμ˜ λͺ¨λ“  쒅속성과 κ·Έ μ •ν™•ν•œ 버전을 ν¬ν•¨ν•˜κ³ , 이λ₯Ό 톡해 개발 ν™˜κ²½μ˜ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€.
  • ν™˜κ²½ μž¬ν˜„: Pipfile.lock은 ν”„λ‘œμ νŠΈλ₯Ό λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄λ‚˜ λ‹€λ₯Έ κ°œλ°œμžμ—κ²Œ 전달할 λ•Œ λ™μΌν•œ 쒅속성을 ν™•μ‹€ν•˜κ²Œ μž¬ν˜„ν•  수 있게 ν•΄μ€λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ“  μ‚¬μš©μžκ°€ λ™μΌν•œ ν™˜κ²½μ—μ„œ μž‘μ—…ν•  수 μžˆλ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

πŸ’‘ Q. pipenv install numpy 만 μˆ˜ν–‰ν•΄λ„, pipfile은 μ—…λ°μ΄νŠΈκ°€ 될텐데, ꡳ이 lock을 ν•΄μ£ΌλŠ” μ΄μœ κ°€ λ­˜κΉŒμš”?

πŸ“– A. pipenv install λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ μžλ™μœΌλ‘œ Pipfile이 μ—…λ°μ΄νŠΈλ˜λ©°, ν•„μš”ν•œ νŒ¨ν‚€μ§€κ°€ μ„€μΉ˜λ©λ‹ˆλ‹€. 그런데 pipenv lock λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것은 좔가적인 λͺ©μ μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

βœ”οΈ pipenv installκ³Ό pipenv lock의 차이

  • pipenv install: 이 λͺ…령은 Pipfile에 λͺ…μ‹œλœ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜κ³  μžλ™μœΌλ‘œ Pipfile.lock을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ μƒˆλ‘œμš΄ νŒ¨ν‚€μ§€κ°€ μ„€μΉ˜λ˜κ±°λ‚˜ μ—…λ°μ΄νŠΈλ  λ•Œλ§ˆλ‹€ Pipfile.lock이 κ°±μ‹ λ˜μ–΄ ν˜„μž¬ ν™˜κ²½μ„ λ°˜μ˜ν•©λ‹ˆλ‹€.
  • pipenv lock: 이 λͺ…령은 μ‹€μ œλ‘œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜μ§€ μ•Šκ³ , ν˜„μž¬ Pipfile의 μƒνƒœλ₯Ό λ°”νƒ•μœΌλ‘œ Pipfile.lockλ§Œμ„ κ°±μ‹ ν•©λ‹ˆλ‹€. μ΄λŠ” νŒ¨ν‚€μ§€λ₯Ό μ‹€μ œλ‘œ μ„€μΉ˜ν•˜μ§€ μ•Šκ³ λ„ 쒅속성을 μ •ν™•νžˆ 잠그고 싢을 λ•Œ μœ μš©ν•©λ‹ˆλ‹€. pipenv lock λͺ…령을 μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” λͺ‡ κ°€μ§€ νŠΉλ³„ν•œ 경우λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€:

    1. 쒅속성 파일(Pipfile)의 μˆ˜λ™ λ³€κ²½: κ°œλ°œμžκ°€ Pipfile을 μˆ˜λ™μœΌλ‘œ νŽΈμ§‘ν•˜μ—¬ νŒ¨ν‚€μ§€ 버전을 λ³€κ²½ν•˜κ±°λ‚˜ μƒˆ νŒ¨ν‚€μ§€λ₯Ό μΆ”κ°€ν•˜λŠ” 경우, Pipfile.lock을 κ°±μ‹ ν•΄μ•Ό κ·Έ 변경사항이 μ •ν™•ν•˜κ²Œ λ°˜μ˜λ©λ‹ˆλ‹€. μ΄λŠ” Pipfile의 μƒνƒœκ°€ Pipfile.lockκ³Ό λ™κΈ°ν™”λ˜λ„λ‘ ν•˜λŠ” 데 ν•„μš”ν•©λ‹ˆλ‹€.
    2. ν•˜μœ„ 쒅속성(νŒ¨ν‚€μ§€)의 μ—…λ°μ΄νŠΈ: νŒ¨ν‚€μ§€μ˜ ν•˜μœ„ 쒅속성이 μ—…λ°μ΄νŠΈλ˜μ—ˆμ„ 경우, pipenv lock λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μ΄λŸ¬ν•œ 변경사항을 Pipfile.lock에 λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ 버전 변동이 μƒμœ„ νŒ¨ν‚€μ§€μ˜ κΈ°λŠ₯성에 영ν–₯을 λ―ΈμΉ  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
    3. λ³΄μ•ˆ 패치 μ—…λ°μ΄νŠΈ: λ³΄μ•ˆ 취약점이 λ°œκ²¬λ˜μ–΄ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ μƒˆλ‘œμš΄ 버전이 μΆœμ‹œλ˜μ—ˆμ„ λ•Œ, pipenv lock을 μ‚¬μš©ν•˜μ—¬ μ΅œμ‹  λ³΄μ•ˆ νŒ¨μΉ˜κ°€ 적용된 λ²„μ „μœΌλ‘œ 쒅속성을 κ°±μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œμ νŠΈμ˜ λ³΄μ•ˆμ„ κ°•ν™”ν•˜λŠ” 데 μ€‘μš”ν•©λ‹ˆλ‹€.
    4. ν˜Έν™˜μ„± 검증(μƒˆ ν™˜κ²½ ν…ŒμŠ€νŠΈ): ν”„λ‘œμ νŠΈλ₯Ό μƒˆλ‘œμš΄ ν™˜κ²½μ— λ°°ν¬ν•˜κΈ° 전에 pipenv lock을 μ‹€ν–‰ν•˜μ—¬ μ΅œμ‹  쒅속성 μƒνƒœλ₯Ό ν™•μ •ν•˜κ³ , 이λ₯Ό 톡해 μƒˆ ν™˜κ²½μ—μ„œμ˜ ν˜Έν™˜μ„±μ„ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 과정은 배포 μ „ μΆ©λŒμ„ λ°©μ§€ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
    5. CI/CD νŒŒμ΄ν”„λΌμΈ(지속적 톡합/배포): CI/CD νŒŒμ΄ν”„λΌμΈμ—μ„œ Pipfile.lock을 주기적으둜 κ°±μ‹ ν•˜μ—¬ ν”„λ‘œμ νŠΈμ˜ 쒅속성이 항상 μ΅œμ‹  μƒνƒœλ‘œ μœ μ§€λ˜κ³ , 배포 μ‹œμ μ— λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

6. ν”„λ‘œμ νŠΈλ³„ 가상 ν™˜κ²½ μ„€μ •

  • 가상 ν™˜κ²½μ€ ν”„λ‘œμ νŠΈ 디렉토리에 κΈ°λ°˜ν•˜μ—¬ μžλ™μœΌλ‘œ 이름이 μƒμ„±λ˜λ©°, κ΄€λ¦¬λŠ” ~/.local/share/virtualenvs λ””λ ‰ν† λ¦¬μ—μ„œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
  • TensorFlow와 PyTorch ν”„λ‘œμ νŠΈ μ˜ˆμ‹œ:

    1
    2
    3
    4
    5
    6
    
    # Tensorflow_ObjectDetection ν”„λ‘œμ νŠΈ 생성
    mkdir Tensorflow_ObjectDetection
    cd Tensorflow_ObjectDetection
    pipenv --python 3.9.1
    pipenv install tensorflow
    pipenv shell # ν”„λ‘œμ νŠΈ κ°€μƒν™˜κ²½ μ‹€ν–‰
    
    1
    2
    3
    4
    5
    6
    
    # PyTorch_AnomalyDetection ν”„λ‘œμ νŠΈ 생성
    mkdir PyTorch_AnomalyDetection
    cd PyTorch_AnomalyDetection
    pipenv --python 3.9.1
    pipenv install torch torchvision
    pipenv shell # ν”„λ‘œμ νŠΈ κ°€μƒν™˜κ²½ μ‹€ν–‰
    

πŸ’‘ Pipfiles(Pipfile, Pipfile.lock)은 Git repository에 μΆ”κ°€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ§Œμ•½ λ‹€λ₯Έμ‚¬λžŒμ΄ repository을 clone ν•˜λ©΄ Pipenv을 ν•΄λ‹Ή μ‹œμŠ€ν…œμ— μ„€μΉ˜ν•˜κ³  pipenv installλ₯Ό μˆ˜ν–‰ν•˜λ©΄ PipenvλŠ” μžλ™μœΌλ‘œ Pipfilesλ₯Ό μ°Ύμ•„μ„œ μƒˆλ‘œμš΄ 가상 ν™˜κ²½μ„ λ§Œλ“€κ³  ν•„μš”ν•œ νŒ¨ν‚€μ§€λ“€μ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

7. pipenv λͺ…λ Ήμ–΄

κΈ°λ³Έ λͺ…λ Ήμ–΄

  • pipenv install: ν”„λ‘œμ νŠΈ μ΄ˆκΈ°ν™” λ˜λŠ” Pipfile에 기둝된 λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€. νŠΉμ • νŒ¨ν‚€μ§€λ₯Ό λͺ…μ‹œν•  경우 ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜κ³  Pipfile을 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  • pipenv uninstall: μ§€μ •λœ νŒ¨ν‚€μ§€λ₯Ό 가상 ν™˜κ²½μ—μ„œ μ œκ±°ν•˜κ³  Pipfileμ—μ„œ ν•΄λ‹Ή ν•­λͺ©μ„ μ œκ±°ν•©λ‹ˆλ‹€.
  • pipenv lock: ν˜„μž¬ 가상 ν™˜κ²½μ— μ„€μΉ˜λœ λͺ¨λ“  μ˜μ‘΄μ„±μ„ Pipfile.lock에 κ³ μ •ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ„ μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ ν™˜κ²½μ—μ„œ λ™μΌν•œ νŒ¨ν‚€μ§€ μ„€μ •μœΌλ‘œ ν™˜κ²½μ„ μž¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • pipenv graph: ν˜„μž¬ μ„€μΉ˜λœ μ˜μ‘΄μ„±μ˜ κ·Έλž˜ν”„λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. μ΄λŠ” νŒ¨ν‚€μ§€ κ°„μ˜ 의쑴 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ μ΄ν•΄ν•˜λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

λ³΄μ•ˆ 및 정리 λͺ…λ Ήμ–΄

  • pipenv check: μ„€μΉ˜λœ νŒ¨ν‚€μ§€λ₯Ό PyUp Safetyλ₯Ό 톡해 λ³΄μ•ˆ 취약점이 μžˆλŠ”μ§€ κ²€μ‚¬ν•˜κ³ , Pipfile에 λͺ…μ‹œλœ PEP 508 λ§ˆμ»€μ™€μ˜ ν˜Έν™˜μ„±μ„ ν™•μΈν•©λ‹ˆλ‹€.
  • pipenv clean: Pipfile.lock에 λͺ…μ‹œλ˜μ§€ μ•Šμ€ λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ œκ±°ν•©λ‹ˆλ‹€. μ΄λŠ” 가상 ν™˜κ²½μ„ κΉ¨λ—ν•˜κ²Œ μœ μ§€ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.

가상 ν™˜κ²½ 관리 λͺ…λ Ήμ–΄

  • pipenv shell: 가상 ν™˜κ²½ 내에 μ‰˜μ„ μ‹œμž‘ν•©λ‹ˆλ‹€. μ΄λŠ” 개발 ν™˜κ²½μ„ 가상 ν™˜κ²½μœΌλ‘œ ν•œμ •ν•˜μ—¬ μž‘μ—…ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • pipenv --rm: ν˜„μž¬ ν”„λ‘œμ νŠΈμ˜ 가상 ν™˜κ²½μ„ μ œκ±°ν•©λ‹ˆλ‹€. 이 λͺ…령은 가상 ν™˜κ²½μ„ μ™„μ „νžˆ μ‚­μ œν•˜μ§€λ§Œ, Pipfileκ³Ό Pipfile.lock은 μœ μ§€λ©λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ 동기화 및 μ—…λ°μ΄νŠΈ λͺ…λ Ήμ–΄

  • pipenv sync: Pipfile.lock에 λͺ…μ‹œλœ μ •ν™•ν•œ νŒ¨ν‚€μ§€ 버전을 μ„€μΉ˜ν•©λ‹ˆλ‹€. μ΄λŠ” ν”„λ‘œμ νŠΈλ₯Ό μƒˆλ‘œ μ‹œμž‘ν•˜κ±°λ‚˜ λ‹€λ₯Έ κ°œλ°œμžμ™€ ν™˜κ²½μ„ 동기화할 λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
  • pipenv update: pipenv lock을 μ‹€ν–‰ν•˜μ—¬ λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κ³ , μ΄μ–΄μ„œ pipenv syncλ₯Ό μ‹€ν–‰ν•˜μ—¬ μ΄λŸ¬ν•œ λ³€κ²½ 사항을 μ μš©ν•©λ‹ˆλ‹€.

μΆ”κ°€ μœ μš©ν•œ μ˜΅μ…˜

  • --verbose: μƒμ„Έν•œ 좜λ ₯ λͺ¨λ“œλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€. λͺ…λ Ή μ‹€ν–‰ 쀑 λ°œμƒν•˜λŠ” λ‚΄λΆ€ 과정을 더 μžμ„Ένžˆ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • --support: 문제 해결을 μœ„ν•œ 진단 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŠ” GitHub 이슈 λ“±μ—μ„œ 문제λ₯Ό 보고할 λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • --python [version]: 가상 ν™˜κ²½μ„ 생성할 λ•Œ μ‚¬μš©ν•  νŠΉμ • 파이썬 버전을 μ§€μ •ν•©λ‹ˆλ‹€.
  • --clear: pipenv, pip, 및 pip-tools κ΄€λ ¨ μΊμ‹œλ₯Ό λͺ¨λ‘ μ§€μ›λ‹ˆλ‹€. μ΄λŠ” 문제 ν•΄κ²° μ‹œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

유첨1

πŸ€” κ·Έλ ‡λ‹€λ©΄ κΈ°μ‘΄ pip 쀑에 -U λ˜λŠ” -q νŒŒλΌλ―Έν„°κ°€ 뢙은 것듀은 μ–΄λ–»κ²Œ ν• κΉŒμš”?

1
2
3
4
pip install -q -U bitsandbytes
pip install -q -U git+https://github.com/huggingface/transformers.git
pip install -q -U git+https://github.com/huggingface/peft.git
pip install -q -U git+https://github.com/huggingface/accelerate.git

pipenvλŠ” 기본적으둜 쒅속성 관리λ₯Ό μœ„ν•΄ 항상 κ°€λŠ₯ν•œ μ΅œμ‹  λ²„μ „μ˜ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λ €κ³  ν•˜κΈ° λ•Œλ¬Έμ— -Uκ°€ μ—†μŠ΅λ‹ˆλ‹€. pip β†’ pipenv둜 λ³€κ²½λ§Œ ν•΄μ£Όλ©΄ μ™„λ£Œ! 🚩

1
2
3
pipenv install -q git+https://github.com/huggingface/transformers.git
pipenv install -q git+https://github.com/huggingface/peft.git
pipenv install -q git+https://github.com/huggingface/accelerate.git

✍️ (μ°Έκ³ ) pip λͺ…λ Ήμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” -q와 -U μ˜΅μ…˜μ˜ 의미

-q (Quiet) : -q μ˜΅μ…˜μ€ β€œquiet” λͺ¨λ“œλ‘œ μ„€μΉ˜λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, λͺ…λ Ήμ–΄ μ‹€ν–‰ μ‹œ 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€μ˜ 양을 μ€„μ—¬μ€λ‹ˆλ‹€. 보톡은 μ„€μΉ˜ κ³Όμ • μ€‘μ˜ μƒμ„Έν•œ 정보λ₯Ό μ΅œμ†Œν™”ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. -qq둜 μ§€μ •ν•˜λ©΄ 좜λ ₯을 λ”μš± 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

-U (Upgrade) : -U μ˜΅μ…˜μ€ β€œupgradeβ€μ˜ μ•½μžλ‘œ, μ§€μ •λœ νŒ¨ν‚€μ§€λ₯Ό μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜λΌλŠ” μ§€μ‹œμž…λ‹ˆλ‹€. λ§Œμ•½ ν•΄λ‹Ή νŒ¨ν‚€μ§€κ°€ 이미 μ‹œμŠ€ν…œμ— μ„€μΉ˜λ˜μ–΄ μžˆλ‹€λ©΄, -U μ˜΅μ…˜μ„ 톡해 μ΅œμ‹  λ²„μ „μœΌλ‘œ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŒ¨ν‚€μ§€κ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ§€ μ•Šμ€ κ²½μš°μ—λŠ” μƒˆλ‘œ μ„€μΉ˜ν•©λ‹ˆλ‹€.

유첨2

λ§Œμ•½, pip install을 μ‚¬μš©ν•˜μ—¬ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν–ˆμ§€λ§Œ pipenv ν™˜κ²½μ—μ„œ κ΄€λ¦¬ν•˜κ³  싢은 경우, Pipfile에 ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μΆ”κ°€ν•˜λŠ” 과정이 ν•„μš”ν•©λ‹ˆλ‹€. μ΄λŠ” pipenvκ°€ ν”„λ‘œμ νŠΈμ˜ 쒅속성을 Pipfileκ³Ό Pipfile.lock을 톡해 κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. λ‹€μŒμ€ pipfile에 pip으둜 μ„€μΉ˜ν•œ νŒ¨ν‚€μ§€λ₯Ό μΆ”κ°€ν•˜λŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.

1. Pipfile μ—΄κΈ°

ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬μ—μ„œ Pipfile을 ν…μŠ€νŠΈ νŽΈμ§‘κΈ°λ‘œ μ—΄μ–΄μ€λ‹ˆλ‹€. Pipfile은 일반적으둜 ν”„λ‘œμ νŠΈμ˜ 루트 디렉토리에 μœ„μΉ˜ν•©λ‹ˆλ‹€.

2. νŒ¨ν‚€μ§€ μΆ”κ°€

Pipfile의 [packages] μ„Ήμ…˜μ— μΆ”κ°€ν•˜κ³ μž ν•˜λŠ” νŒ¨ν‚€μ§€λ₯Ό λ‹€μŒκ³Ό 같이 κΈ°μž¬ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ νŒ¨ν‚€μ§€ 이름과 μ›ν•˜λŠ” 버전 κ·œμΉ™μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. *λŠ” μ΅œμ‹  버전을 μžλ™μœΌλ‘œ μ„ νƒν•˜λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€:

1
2
3
4
[packages]
requests = "*"  # μ΅œμ‹  버전을 μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ
flask = "==1.1.2"  # νŠΉμ • 버전을 λͺ…μ‹œν•˜κ³ μž ν•  λ•Œ
numpy = ">=1.18.5"  # μ΅œμ†Œ 버전 μš”κ΅¬μ‚¬ν•­μ„ λͺ…μ‹œν•˜κ³ μž ν•  λ•Œ

3. Pipfile.lock μ—…λ°μ΄νŠΈ

μˆ˜λ™μœΌλ‘œ Pipfile을 νŽΈμ§‘ν•œ ν›„, Pipfile.lock을 μ—…λ°μ΄νŠΈν•΄μ•Ό 쒅속성이 μ˜¬λ°”λ₯΄κ²Œ λ°˜μ˜λ©λ‹ˆλ‹€. ν„°λ―Έλ„μ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€. 이 λͺ…령은 Pipfile의 변경사항을 λ°”νƒ•μœΌλ‘œ Pipfile.lock을 μƒˆλ‘­κ²Œ μƒμ„±ν•©λ‹ˆλ‹€:

1
pipenv lock

4. νŒ¨ν‚€μ§€ μ„€μΉ˜

μˆ˜μ •λœ Pipfile을 λ°”νƒ•μœΌλ‘œ ν•„μš”ν•œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λ €λ©΄ λ‹€μŒ λͺ…령을 μ‚¬μš©ν•©λ‹ˆλ‹€. 이 λͺ…령은 Pipfile에 λͺ…μ‹œλœ λͺ¨λ“  νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜κ³ , Pipfile.lockκ³Ό μΌμΉ˜μ‹œν‚΅λ‹ˆλ‹€:

1
pipenv install

μ£Όμ˜μ‚¬ν•­

  • 버전 ν˜Έν™˜μ„±: νŒ¨ν‚€μ§€ 버전을 μˆ˜λ™μœΌλ‘œ μ§€μ •ν•  λ•ŒλŠ” ν˜Έν™˜μ„±μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ„€μΉ˜ν•˜λ €λŠ” νŒ¨ν‚€μ§€κ°€ ν”„λ‘œμ νŠΈμ— 이미 μžˆλŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€μ™€ ν˜Έν™˜λ˜λŠ”μ§€ 확인해야 ν•©λ‹ˆλ‹€.
  • 문법 였λ₯˜: Pipfile을 νŽΈμ§‘ν•  λ•Œ 문법을 μ •ν™•ν•˜κ²Œ μ§€μΌœμ•Ό ν•©λ‹ˆλ‹€. TOML 문법 였λ₯˜λŠ” pipenv λͺ…령을 μ‹€ν–‰ν•  λ•Œ 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜€λŠ˜λ„ κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ ✌



-->