Pip: 직접 URL PEP 508 지원 및 Git의 ν•˜μœ„ 쒅속성 μ„€μΉ˜

에 λ§Œλ“  2018λ…„ 07μ›” 03일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: pypa/pip

  • 핍 버전: 10.0.1
  • 파이썬 버전: 3.7.0
  • 운영 체제: macOS

λ‚˜λŠ” ν•˜λ£¨ 쒅일 gitμ—μ„œ ν•˜μœ„ 쒅속성을 μ„€μΉ˜ν•˜λŠ” 방법에 λŒ€ν•΄ μ½μ—ˆμœΌλ©° μ—¬μ „νžˆ μ˜¬λ°”λ₯Έ μ†”λ£¨μ…˜μ„ μ°ΎκΈ° μœ„ν•΄ κ³ κ΅°λΆ„νˆ¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜μ˜ μ‚¬μš© 사둀

κΈ°μ‘΄ Python 라이브러리(PyPiμ—μ„œ μ‚¬μš© κ°€λŠ₯)λ₯Ό λΆ„κΈ°ν•˜κ³  μ—…μŠ€νŠΈλ¦Όμ— λ³‘ν•©λ˜μ§€ μ•Šμ„ λͺ‡ 가지 λ³€κ²½ 사항을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
λ‚΄ ν”„λ‘œμ νŠΈ 쀑 μΌλΆ€λŠ” 라이브러리 포크에 μ˜μ‘΄ν•©λ‹ˆλ‹€. μ΄μ „μ—λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μ΄μ—ˆκ³  Pipfile의 Gitμ—μ„œ νŠΉμ • λΆ„κΈ°/컀밋을 μ„€μΉ˜ν•˜λ„λ‘ μ‰½κ²Œ 지정할 수 μžˆλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨ 쒅속성을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ Pipenvλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ„±μž₯ν•˜μ—¬ 이제 라이브러리둜 λ³€ν™˜ μ€‘μž…λ‹ˆλ‹€(PyPi에 κ²Œμ‹œλ˜μ§€ μ•ŠμŒ). λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ Git의 ν•˜μœ„ 쒅속성 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€.
λ‚˜λŠ” μ΅œμ†Œν•œ λ‹€μŒ 문제λ₯Ό μ½μ—ˆμŠ΅λ‹ˆλ‹€. #3610, #4187, #2124, #5384 및 기타 λ§Žμ€ λ¬Έμ œμ™€ λ¬Όλ‘  PEP. 읽기λ₯Ό λλƒˆμ„ λ•Œ λ‚˜λŠ” 읽기 μ‹œμž‘ν–ˆμ„ λ•Œλ³΄λ‹€ 더 ν˜Όλž€μŠ€λŸ¬μ› λ‹€.

pip 10μ—μ„œ PEP-508을 κ΅¬ν˜„ν•˜λ©΄μ„œ μ΄ν•΄ν•œ 바에 λ”°λ₯΄λ©΄ λ‹€μŒμ„ μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

setup(
    name='dmfigol',
...
    install_requires=[
        "requests",
        'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
    ],
)

κ·ΈλŸ¬λ‚˜ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
  ...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies

λ‚΄ 질문:
1) λ‚΄κ°€ λ­”κ°€λ₯Ό 잘λͺ»ν–ˆκ±°λ‚˜ μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?
2) μ§€μ›ν•˜μ§€ μ•ŠλŠ” 경우 지원될 μ˜ˆμ •μž…λ‹ˆκΉŒ?
3) setup.pyμ—μ„œ 더 선언적인 κ²ƒμœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λ €λŠ” 경우 pyproject.toml μ—μ„œλ„ μœ μ‚¬ν•œ ꡬ문을 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?
4)λ₯Ό μ‚¬μš©ν•˜λŠ” ν˜„μž¬ μ‚¬μš©ν•  μˆ˜μžˆλŠ” μœ μΌν•œ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€ --process-dependency-links 및 dependency_links μ„Ήμ…˜ setup.py ?
5) μ—…μŠ€νŠΈλ¦Όμ΄ PyPi의 라이브러리λ₯Ό 1.3.4 μ΄μƒμœΌλ‘œ μ—…λ°μ΄νŠΈν•˜κ³  포크 버전 1.3.3을 계속 μ‚¬μš©ν•˜κ³  싢은 경우 μ–΄λ–»κ²Œ λ©λ‹ˆκΉŒ?

κ°μ‚¬ν•©λ‹ˆλ‹€

UPD: 이 μŠ€λ ˆλ“œλ₯Ό μš°μ—°νžˆ λ°œκ²¬ν•˜λ©΄ #4187이 κ΅¬ν˜„λ  λ•ŒκΉŒμ§€ ν˜„μž¬ μž‘λ™ 쀑인 μ†”λ£¨μ…˜:

setup(
    ...
    install_requires=[
        "smartsheet-python-sdk==10.1.3.3",
    ],
    dependency_links=[
        'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
    ],
...
auto-locked support

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

λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν–ˆκ±°λ‚˜ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

μ’…μ†μ„±μœΌλ‘œμ„œμ˜ PEP 508 URL μš”κ΅¬ 사항은 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©΄ μ§€μ›λ˜λ‚˜μš”?

예. μ•„λž˜λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

setup.pyμ—μ„œ 더 선언적인 κ²ƒμœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λ €λŠ” 경우 pyproject.tomlμ—μ„œλ„ μœ μ‚¬ν•œ ꡬ문을 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

pyproject.toml λŠ” λΉŒλ“œ μ‹œκ°„ 쒅속성을 μ§€μ •ν•˜κ³  도ꡬ에 λŒ€ν•œ ꡬ성을 κ°–λŠ” μž₯μ†Œλ‘œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€. κ·Έ μ΄μ™Έμ˜ λͺ¨λ“  것은 μ‚¬μš© 쀑인 도ꡬ에 μ˜ν•΄ κ΅¬ν˜„λ©λ‹ˆλ‹€.

ν˜„μž¬ setup.pyμ—μ„œ --process-dependency-links 및 dependency_links μ„Ήμ…˜μ„ μ‚¬μš©ν•  수 μžˆλŠ” μœ μΌν•œ μ†”λ£¨μ…˜μž…λ‹ˆκΉŒ?

예. 이것이 #4187의 λ™κΈ°μž…λ‹ˆλ‹€.


PyPIμ—μ„œ μ„€μΉ˜λœ νŒ¨ν‚€μ§€λ‘œ 인해 pipκ°€ μž„μ˜μ˜ μ›Ή URL에 λ„λ‹¬ν•˜λŠ” 것을 μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ’…μ†μ„±μ—μ„œ PEP 508 URL μš”κ΅¬ 사항을 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν–ˆμŠ΅λ‹ˆλ‹€. 기본적으둜 pip install spam λŠ” pipκ°€ PyPIλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ 것에 λ„λ‹¬ν•˜λ„λ‘ ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

#4187μ—μ„œ ν˜„μž¬ μ œμ•ˆλœ μ†”λ£¨μ…˜μ€ νŒ¨ν‚€μ§€κ°€ μ‹€μ œλ‘œ PyPIμ—μ„œ 직접 μ„€μΉ˜λ  λ•Œλ§Œ URL 쒅속성을 μ°¨λ‹¨ν•˜λ„λ‘ 차단 쑰건을 μˆ˜μ •ν•˜μ—¬ λ‹€λ₯Έ μ„€μΉ˜ λͺ¨λ“œμ—μ„œ PEP 508 URL 쒅속성을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

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

λ‚΄κ°€ λ­”κ°€ 잘λͺ»ν–ˆκ±°λ‚˜ μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

μ’…μ†μ„±μœΌλ‘œμ„œμ˜ PEP 508 URL μš”κ΅¬ 사항은 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ§€μ›ν•˜μ§€ μ•ŠμœΌλ©΄ μ§€μ›λ˜λ‚˜μš”?

예. μ•„λž˜λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

setup.pyμ—μ„œ 더 선언적인 κ²ƒμœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λ €λŠ” 경우 pyproject.tomlμ—μ„œλ„ μœ μ‚¬ν•œ ꡬ문을 μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ˜¬λ°”λ₯΄κ²Œ μ΄ν•΄ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

pyproject.toml λŠ” λΉŒλ“œ μ‹œκ°„ 쒅속성을 μ§€μ •ν•˜κ³  도ꡬ에 λŒ€ν•œ ꡬ성을 κ°–λŠ” μž₯μ†Œλ‘œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€. κ·Έ μ΄μ™Έμ˜ λͺ¨λ“  것은 μ‚¬μš© 쀑인 도ꡬ에 μ˜ν•΄ κ΅¬ν˜„λ©λ‹ˆλ‹€.

ν˜„μž¬ setup.pyμ—μ„œ --process-dependency-links 및 dependency_links μ„Ήμ…˜μ„ μ‚¬μš©ν•  수 μžˆλŠ” μœ μΌν•œ μ†”λ£¨μ…˜μž…λ‹ˆκΉŒ?

예. 이것이 #4187의 λ™κΈ°μž…λ‹ˆλ‹€.


PyPIμ—μ„œ μ„€μΉ˜λœ νŒ¨ν‚€μ§€λ‘œ 인해 pipκ°€ μž„μ˜μ˜ μ›Ή URL에 λ„λ‹¬ν•˜λŠ” 것을 μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ’…μ†μ„±μ—μ„œ PEP 508 URL μš”κ΅¬ 사항을 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯을 λΉ„ν™œμ„±ν™”ν–ˆμŠ΅λ‹ˆλ‹€. 기본적으둜 pip install spam λŠ” pipκ°€ PyPIλ₯Ό μ œμ™Έν•œ λ‹€λ₯Έ 것에 λ„λ‹¬ν•˜λ„λ‘ ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

#4187μ—μ„œ ν˜„μž¬ μ œμ•ˆλœ μ†”λ£¨μ…˜μ€ νŒ¨ν‚€μ§€κ°€ μ‹€μ œλ‘œ PyPIμ—μ„œ 직접 μ„€μΉ˜λ  λ•Œλ§Œ URL 쒅속성을 μ°¨λ‹¨ν•˜λ„λ‘ 차단 쑰건을 μˆ˜μ •ν•˜μ—¬ λ‹€λ₯Έ μ„€μΉ˜ λͺ¨λ“œμ—μ„œ PEP 508 URL 쒅속성을 μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

μžμ„Έν•œ μ„€λͺ… κ°μ‚¬ν•©λ‹ˆλ‹€, 정말 κ°μ‚¬ν•©λ‹ˆλ‹€.

이 μŠ€λ ˆλ“œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•œ μƒˆ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.

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