<p>pip 19.0์ด CWD์—์„œ ์„ค์น˜ํ•  ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์ง€ ๋ชปํ•จ</p>

์— ๋งŒ๋“  2019๋…„ 01์›” 23์ผ  ยท  89์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pip

ํ™˜๊ฒฝ

  • pip ๋ฒ„์ „ : 19.0
  • Python ๋ฒ„์ „ : 3.6
  • ์šด์˜์ฒด์ œ : MacOS

๊ธฐ์ˆ 
pip 19.0์œผ๋กœ pip install pyinstaller == 3.4๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์„ค์น˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ModuleNotFoundError : 'PyInstaller'๋ผ๋Š” ๋ชจ๋“ˆ์ด ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™
pip 18.1๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ pyinstall์ด ์„ค์น˜ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๋ฐฉ๋ฒ•
python3 ์‚ฌ์šฉ :
pip ์„ค์น˜ pyinstaller = 3.4

์‚ฐ์ถœ

pip install pyinstaller==3.4
Collecting pip
  Using cached https://files.pythonhosted.org/packages/60/64/73b729587b6b0d13e690a7c3acd2231ee561e8dd28a58ae1b0409a5a2b20/pip-19.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-19.0
(BuildVEnv) jlaroche-mbp:TrackSense$ pip install pyinstaller
Collecting pyinstaller
  Using cached https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command /Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/bin/python3 /Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/tmps3z6flnv:
  Traceback (most recent call last):
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 207, in <module>
      main()
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requirements=['wheel'])
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 101, in _get_build_requires
      _run_setup()
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 20, in <module>
      from PyInstaller import __version__ as version, HOMEPATH, PLATFORM
  ModuleNotFoundError: No module named 'PyInstaller'

ํƒ€์ž„ ๋ผ์ธ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ์ฐธ๊ณ  ์‚ฌํ•ญ : https://github.com/pypa/pip/issues/6163#issuecomment -460563963 ์ฐธ์กฐ

PEP 517 impact auto-locked bug

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

[...] ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ --no-use-pep517์ด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

PyInstaller๋Š” --no-use-pep517 ์ž˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ pyinstaller๊ฐ€ ์„ค์น˜๋ฅผ ์œ„ํ•ด ์ž์ฒด์ ์œผ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

PyInstaller ์ง์›์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ 18.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 19.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด์ด ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. pip ''๊ฐ€ sys.path์— ์—†๊ธฐ ๋•Œ๋ฌธ์— PyInstaller ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/pyinstaller/pyinstaller/issues/2730

์ด๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์ž‘์—… ํ๋ฆ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋„ฃ์–ด __version__ = "1.2.3" ์— foo/__init__.py ๋‹ค์Œ์„ ์ˆ˜ํ–‰ import foo ์— setup.py ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‘ ๊ณณ์—์„œ ๋ฒ„์ „์„ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž๋Š” PEP 396 ์— ๋”ฐ๋ผ ๋ฒ„์ „์„ ๊ฒ€์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# foo/__init__.py
__version__ = "1.2.3"
# setup.py
from setuptools import setup

import foo

setup(..., version=foo.__version__)

๋˜ํ•œ ์ด๊ฒƒ์€ pyproject.toml ํŒŒ์ผ (๋ฐ setup.py )์ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋ฉด ์„ค์น˜๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ–‰๋™์— ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ sys.path / PYTHONPATH ?

์•„, ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™์•„์š”. pyproject.toml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ธฐ๋ณธ์ ์œผ๋กœ pip์—๊ฒŒ PEP 517/518์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

# pyproject.toml
[build-system]
requires = ["setuptools", "wheel"]

์œ„์˜ ๋‚ด์šฉ์€ PyInstaller๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด setuptools ๋ฐ wheel ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  pip์— ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ PyInstaller์˜ ๊ฒฝ์šฐ setup.py ์—๋„์ด ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

# setup.py
from PyInstaller import __version__

PEP 517 ๊ด€์ ์—์„œ setuptools ๋ฐ wheel ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ž์ฒด์ ์œผ๋กœ ๊ตฌ์ถ•ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์กฐ๊ธˆ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

# pyproject.toml
[build-system]
requires = ["setuptools", "wheel", "PyInstaller"]

@cjerdonek ์ด https://github.com/pypa/pip/issues/6175#issuecomment -456769285์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ˆ„๊ตฐ๊ฐ€ --no-use-pep517 ์ด (๊ฐ€)์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ์˜ ์›์ธ์€ ๋นŒ๋“œ ๊ฒฉ๋ฆฌ ๋˜๋Š” PEP 517 ์ฝ”๋“œ๊ฐ€ pandas๊ฐ€ setup.py ์˜†์—์žˆ๋Š” versioneer.py๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ฃจํŠธ๊ฐ€ sys.path์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ธ์  ๊ฐ€ ๋‹ค๊ฐ€์˜ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ง€๋งŒ ๊ทธ ํ† ๋ก ์ด ๋ฌด์—‡์ธ์ง€ ๋จธ๋ฆฟ์†์—์„œ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” pip ๋Œ€์‹  setuptools ๋นŒ๋“œ ๋ฐฑ์—”๋“œ์˜ ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผ๋˜๊ฑฐ๋‚˜ pip์˜ ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๊ฒฐํ•จ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[...] ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ --no-use-pep517์ด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

PyInstaller๋Š” --no-use-pep517 ์ž˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด PEP 517 ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ด๋ฉฐ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ sys.path ์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ @pfmoore ๋Š” ๊ทธ๊ฒƒ์ด pip์˜ ์ฑ…์ž„์ธ์ง€ ์„ค์ • ๋„๊ตฌ์ธ์ง€ ๋” ์ž˜

์ด๊ฒƒ์ด ๋„์›€์ด๋œ๋‹ค๋ฉด ( apache-airflow ๋ฅผ ํ†ตํ•ด pip install pendulum==1.4.4 ์‹คํŒจํ•˜์ง€๋งŒ pip install --no-use-pep517 pendulum==1.4.4 ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์–ป๋Š” ์Šคํƒ ์ถ”์ ์€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

Collecting pendulum==1.4.4
  Using cached https://files.pythonhosted.org/packages/85/a5/9fc15751f9725923b170ad37d6c61031fc9e941bafd5288ca6ee51233284/pendulum-1.4.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command /Users/ash/.virtualenvs/clean-airflow/bin/python3.7 /Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/tmprosed3kj:
  Traceback (most recent call last):
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 207, in <module>
      main()
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requirements=['wheel'])
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 101, in _get_build_requires
      _run_setup()
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 47, in <module>
      from build import *
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/build.py", line 7, in <module>
      from pip._vendor import pytoml
  ModuleNotFoundError: No module named 'pip'

๋˜ํ•œ ๋‹ค์Œ ์„ค์น˜๋Š” pip v 19.0์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ --no-use-pep5517์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
pendulum == 1.5.0 (AttributeError : ๋ชจ๋“ˆ 'enum'์— 'IntFlag'์†์„ฑ์ด ์—†์Œ)
pendulum == 1.5.1 (AttributeError : ๋ชจ๋“ˆ 'enum'์— 'IntFlag'์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.)
pendulum == 2.0.0 (AttributeError : ๋ชจ๋“ˆ 'enum'์— 'IntFlag'์†์„ฑ์ด ์—†์Œ)
pendulum == 2.0.1 (AttributeError : ๋ชจ๋“ˆ 'enum'์— 'IntFlag'์†์„ฑ์ด ์—†์Œ)
pendulum == 2.0.2 (AttributeError : ๋ชจ๋“ˆ 'enum'์— 'IntFlag'์†์„ฑ์ด ์—†์Œ)

2.0.3 ๋ฐ 2.0.4๋Š” ์ž˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

cartopy (์ตœ์†Œํ•œ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค)๋„ 19.0 ์ดํ›„ ์„ค์น˜์— ์‹คํŒจํ•˜์—ฌ setup.py ์˜†์—์žˆ๋Š” versioneer.py๋ฅผ ๊ฐ€์ ธ ์˜ค์ง€ ๋ชปํ•จ

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋‹ค๋ฃจ๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์˜ ๋ฌธ์ œ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. pyproject.toml์„ ์‚ฌ์šฉํ•˜์—ฌ python black ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  setup.py์—์„œ ์œ ์‚ฌํ•œ from project.version import __version__ ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ pyproject.toml์—์„œ ํ”„๋กœ์ ํŠธ ๊ฒฉ๋ฆฌ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์ด --no-buid-isolation ๋˜๋Š” --no-use-pep517 ๋ฅผ) ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ถˆํ•ฉ๋ฆฌํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹คํŒจ๋Š” get_requires_for_build_wheel ์—์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ setuptools ๋ฐฑ์—”๋“œ๋Š” setup.py ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋นŒ๋“œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค (ํŠน์ • ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์— ์žˆ์Œ ). ์ด ์ฝ”๋“œ๋Š” ๋‚˜์—๊ฒŒ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ด๋ฉฐ ์™œ ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์ดˆ๊ธฐ ๋ณธ๋Šฅ์€ ์ด๊ฒƒ์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•  setuptools ๋ฐฑ์—”๋“œ์˜ ๋ฒ„๊ทธ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PEP 517์€ sys.path ๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ํ”„๋ŸฐํŠธ ์—”๋“œ๊ฐ€ ํ›„ํฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ๊ฒฉ๋ฆฌ๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ž ์žฌ์  ์ธ ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๋นŒ๋“œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ถ€๋Š” ํ•„์ˆ˜์ด์ง€๋งŒ ์ง€์ •๋˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€). ๊ทธ๋ž˜์„œ ๋‚ด ์„ ํ˜ธ๋Š” ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path ์ถ”๊ฐ€ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ํšŒ๊ท€์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ˆ˜์ •์„ ์ œ๊ณตํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด๊ฒƒ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ:

  1. ๋ฐฑ์—”๋“œ ๋ฌธ์ œ๋กœ ๊ฒ€ํ†  ํ•  ์ˆ˜ ์žˆ๋„๋ก setuptools์—๋ณด๊ณ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์ธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ setuptools ๋ฐฑ์—”๋“œ์—์„œ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์•„๋งˆ๋„ sys.path ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•จ).
  2. setuptools๊ฐ€์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด pip๋Š” ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ PEP 517์€์ด๋ฅผ ํ”„๋ก ํŠธ ์—”๋“œ์˜ ์ฑ…์ž„์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€์— ํ›„ํฌ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก sys.path ์ ์–ด๋„ PEP์˜ ์„ค๋ช…์„ ํ•„์š”๋กœํ•œ๋‹ค.

์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” PEP 517์ด ๊ฐœ๋ฐœ ๋  ๋•Œ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ setuptools์— ํŠน์ •ํ•œ (๋˜๋Š” ๋นŒ๋“œ์˜ ์ผ๋ถ€๋กœ ์ž„์˜์˜ Python ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ์— ํŠน์ •ํ•œ) ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ setup.py ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ setup.py ์ด $PWD ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์œ„์—์ด ์ฑ…์ž„ ๋ฐ€์–ด ํ•ฉ๋ฆฌ์ ์ธ ์ƒ๊ฐ setuptools ๊ทธ ์•„๋งˆ ์ •๋ง ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” ์œ ์ผํ•œ ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์—.

๋„ค, ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ข€ ๋” ์ƒ๊ฐํ•˜๋ฉด setuptools ๋ฐฑ์—”๋“œ ์ฑ…์ž„์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. PEP 517 ์ด์ „, pip๋Š” setup.py ๋ฅผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ ํ–ˆ์œผ๋ฏ€๋กœ ํ‘œ์ค€ Python ๊ทœ์น™์€ ์Šคํฌ๋ฆฝํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ sys.path ํ•ฉ๋‹ˆ๋‹ค. PEP 517์—์„œ setup.py ํ˜ธ์ถœ์€ ๋ฐฑ์—”๋“œ ํ›„ํฌ์— ๋Œ€ํ•œ ํ˜ธ์ถœ๋กœ ๋Œ€์ฒด๋˜๋ฏ€๋กœ ํ•ด๋‹น ํ›„ํฌ๋Š” ์˜๋ฏธ๋ฅผ ๋ณด์กดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. setuptools๋Š” ํ›„ํฌ์—์„œ setup.py in-process๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ sys.path ์ž์ฒด๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋ผ๊ฑด๋Œ€, ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ํฐ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค. @jeanlaroche (๋˜๋Š”์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ)๊ฐ€์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•˜์—ฌ setuptools ์ถ”์ ๊ธฐ์—์„œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

[...] ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ --no-use-pep517์ด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

--no-use-pep517์ด pip install pandas ์„ฑ๊ณต์„ ํ—ˆ์šฉ ํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--no-use-pep517 ์ด ๋ชจ๋“  ์†์ƒ๋œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ ์„ฑ๊ณต

pip install pyinstaller --no-use-pep517
Collecting pyinstaller
  Using cached https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz
Requirement already satisfied: setuptools in c:\python37\lib\site-packages (from pyinstaller) (39.0.1)
Collecting pefile>=2017.8.1 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/ed/cc/157f20038a80b6a9988abc06c11a4959be8305a0d33b6d21a134127092d4/pefile-2018.8.8.tar.gz (62kB)
    100% |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 71kB 1.0MB/s
Collecting macholib>=1.8 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/41/f1/6d23e1c79d68e41eb592338d90a33af813f98f2b04458aaf0b86908da2d8/macholib-1.11-py2.py3-none-any.whl
Collecting altgraph (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/0a/cc/646187eac4b797069e2e6b736f14cdef85dbe405c9bfc7803ef36e4f62ef/altgraph-0.16.1-py2.py3-none-any.whl
Collecting pywin32-ctypes (from pyinstaller)
  Using cached https://files.pythonhosted.org/packages/9e/4b/3ab2720f1fa4b4bc924ef1932b842edf10007e4547ea8157b0b9fc78599a/pywin32_ctypes-0.2.0-py2.py3-none-any.whl
Collecting future (from pefile>=2017.8.1->pyinstaller)
  Downloading https://files.pythonhosted.org/packages/90/52/e20466b85000a181e1e144fd8305caf2cf475e2f9674e797b222f8105f5f/future-0.17.1.tar.gz (829kB)
    100% |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 829kB 1.6MB/s
Installing collected packages: future, pefile, altgraph, macholib, pywin32-ctypes, pyinstaller
  Running setup.py install for future ... done
  Running setup.py install for pefile ... done
  Running setup.py install for pyinstaller ... done
Successfully installed altgraph-0.16.1 future-0.17.1 macholib-1.11 pefile-2018.8.8 pyinstaller-3.4 pywin32-ctypes-0.2.0

๋‚˜๋Š” ์ด๊ฒƒ์ด pip / setuptools์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. PEP 517์˜ Build Environment ์„น์…˜์„ ์ฝ์—ˆ์„ ๋•Œ pyproject.toml ์„ ์–ธ ๋œ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ๊ฐ€์ •ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ setup.py ์—์„œ ์„ค์น˜์ค‘์ธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ๋„ ๋‚˜์œ ์Šต๊ด€์ด ์•„๋‹Œ๊ฐ€? PyPA ์˜์ด ํŒจํ‚ค์ง• ๊ฐ€์ด๋“œ์— ์„ค๋ช… ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํ•œ๊ณณ์—์„œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ํ›จ์”ฌ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•

๋‚˜๋Š” ๋ชจ๋‘์ด๋ฅผ ๋ฐ”๋ผ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜์กด ์ค‘์ง€ ๊ฐˆ ์ˆ˜์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋  ์ˆ˜ @uranusjr ๋ฐ pypa / setuptools์— # 1642์—์„œ ํ† ๋ก ์—์„œ๋Š” . ์— sys.path ๋‹น์‹ ์€์„ ์‹คํ–‰ํ•  ๋•Œ python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์„๋ณด๋‹ค ๋ช…์‹œ์ ์ธ ์˜๋ฏธ ์ฒด๊ณ„๋กœ ์ด๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” pyproject.toml ์กด์žฌ๋งŒ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์ด PEP 518๊ณผ PEP 517์„ ๋ชจ๋‘ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๊ฐ‘์ž๊ธฐ ์ƒˆ๋กœ์šด ์˜๋ฏธ๋ฅผ ๊ฐ–๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ pip ์˜ ๋ถ€๋ถ„์— ๋Œ€ํ•œ์ด ๊ฒฐ์ •์€ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” pyproject.toml ์˜ ์กด์žฌ๋ฅผ ๊ฐ€์ง€๊ณ  PEP 518์— ์˜ตํŠธ ์ธ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ PEP 517์ด ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์†”์งํžˆ ๋งํ•ด์„œ ๋ชจ๋“  ์ƒํ™ฉ์ด ํ—˜๋‚œํ•˜์ง€๋งŒ setuptools ๋ณด๋‹ค๋Š” pip ๊ฐ€ ๊ฒฝ๊ณ ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ PEP 517์„ ์˜ตํŠธ ์ธํ•˜๊ณ  pyproject.toml ์˜ ์กด์žฌ๊ฐ€ 20.0 ๋˜๋Š” 21.0 ์ดํ›„์— PEP 517์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๋งํ•˜๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  pip ์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค build-backend ์ด pyproject.toml ์—์„œ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 21.0 ์ดํ›„ ๋นŒ๋“œ ๊ฒฉ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ setuptools.build_meta ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋Š” ...์—์„œ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค."

๋˜ํ•œ setup.py ์—์„œ ์„ค์น˜์ค‘์ธ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ๋„ ๋‚˜์œ ์Šต๊ด€์ด ์•„๋‹Œ๊ฐ€? PyPA ์˜์ด ํŒจํ‚ค์ง• ๊ฐ€์ด๋“œ์— ์„ค๋ช… ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ํ•œ๊ณณ์—์„œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ํ›จ์”ฌ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•

๊ณต์ •ํ•˜๊ฒŒ ๋งํ•˜๋ฉด,์ด ๊ฐ€์ด๋“œ๋Š” setup.py ์—์„œ ์„ค์น˜๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์ „๋žต 6์œผ๋กœ ์ •์˜ํ•˜๋ฏ€๋กœ ํ™•์‹คํžˆ ๋‹ค์†Œ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ „๋žต์—์„œ ๋ฒ—์–ด๋‚˜๋ฉด ๋” ์ด์ƒ ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

pyproject.toml ์˜ ์กด์žฌ์— ๋Œ€ํ•ด PEP 517์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ๋กœ ํ•œ ๊ฒฐ์ •์€ ์˜๋„์  ์ธ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค (๋…ผ์˜๋Š” PEP 517 ๊ตฌํ˜„ ๋ฌธ์ œ ๋˜๋Š” PR์— ๋Œ€ํ•œ ๊ฒƒ์ด์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์ฐพ์„ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค). ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋ณด๋Š” ๊ฒƒ์— ๋น„์ถ”์–ด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฐ ์ด์œ ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ ๋Š” ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

Pip ์ž์ฒด๋Š” setup.py ์ด ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ sys.path ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ฒฌํ•ด๋ฅผ ๊ฐ–์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ„๋‹จํžˆ pip๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋‹ค์†Œ ๊บผ๋ฆฝ๋‹ˆ๋‹ค. setuptools๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์„ ํ‘ธ์‹œํ•˜๋ ค๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. setup.py ์—์„œ ๋นŒ๋“œ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐ ๋งŽ์€ ์–ด๋ ค์›€์ด ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๊ฒฝ๊ณ ๋ฅผ ์œ ๋ฐœ ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์—”๋“œ๊ฐ€ ํ•ด๋‹น ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœํ•˜๋ฉด, pip๊ฐ€ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ๋Œ€๋กœ ๊ฒฝ๊ณ  ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์™œ ์‚ฌ์šฉ์ž๋“ค์€ "๋‹น์‹ ์€ setup.py ์—์„œ ๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค."๋ผ๋Š” ์˜๋ฏธ๋กœ "๋นŒ๋“œ ๊ฒฉ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ setuptools.build_meta ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ์ฝ์—ˆ ์„๊นŒ์š”? setup.py "? ๋‘ ๊ฐ€์ง€ ์‚ฌ์‹ค์€ ๋‚˜์™€ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ...

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

Pip ์ž์ฒด๋Š” setup.py๊ฐ€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ sys.path์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์€์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ฒฌํ•ด๋ฅผ ๊ฐ–์ง€ ์•Š์œผ๋ฏ€๋กœ setuptools๊ฐ€ ํ‘ธ์‹œ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— pip๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋‹ค์†Œ ๊บผ๋ คํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’.

์‚ฌ์‹ค, pip ๋Š” setuptools.build_meta ํ›„ํฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด setup.py ํ˜ธ์ถœ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ๋™์ผํ•ด์•ผํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋ณด์•˜๊ณ , ์šฐ๋ฆฌ ( setuptools )๊ฐ€ setuptools.build_meta ์˜ ๊ณ„์•ฝ์„ "์ด๊ฒƒ์ด python setup.py ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์•„์ง ํ™•๋ฆฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค setuptools python setup.py "๋˜๋Š” ๋Œ€์‹ "์ด๊ฒƒ์€ setup.py ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ์ข€ ๋” ์ž ๊ฒจ ์žˆ๊ณ  ๊ฒฉ๋ฆฌ ๋œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค ".

๋ฌผ๋ก  setuptools ๋Š” "๊ธฐ๋Šฅ์˜ ๊ณ„์•ฝ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๊ณ  pip ๋Š” "๊ธฐ๋ณธ์ ์œผ๋กœ PEP 517๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์žˆ๋‹ค๊ณ  ๋‘˜ ๋‹ค ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด, pip๊ฐ€ ์ œ์•ˆํ•œ๋Œ€๋กœ ๊ฒฝ๊ณ  ํ–ˆ๋”๋ผ๋„ ์‚ฌ์šฉ์ž๊ฐ€ "๋นŒ๋“œ ๊ฒฉ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ setuptools.build_meta๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ "setup.py์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์˜๋ฏธ๋กœ ์ฝ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‘ ๊ฐ€์ง€ ์‚ฌ์‹ค์€ ๋‚˜์™€ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ...

๊ด€๋ จ์ด์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์˜๋ฏธ ์ฒด๊ณ„์— ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ฒฝ๊ณ ์˜ ์š”์ ์€ "์ด ๋นŒ๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๊ธฐ๋ฅผ ์›ํ•˜๋Š”์ง€ ๋ช…์‹œ ํ•ด์ฃผ์„ธ์š”. ๊ณง ๋นŒ๋“œ๋ฅผ ์†์ƒ์‹œํ‚ฌ ์ˆ˜์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค." ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ์ „์— pyproject.toml ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ฐœ์ƒํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ํŒŒ์†์„ ์‚ฌ์ „์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๊ฐ€๋Šฅ์„ฑ์— "๋”๋ฏธ"PEP 517 ๋ฐฑ์—”๋“œ ๋งŒ๋“ค ์ˆ˜ setuptools ๊ฐ™์€ setuptools.build_meta_legacy ๋‹จ์ง€ chdir ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ๋„ฃ๊ณ  ์›์šฉ setuptools.build_meta , ๊ทธ ๋ฐฉ๋ฒ• ์‚ฌ๋žŒ๋“ค์€ ๊นจ์ง€๊ธฐ ์‹œ์ž‘ ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด์ „ ํ–‰๋™์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” pyproject.toml ํŒŒ์ผ์˜ ์กด์žฌ์— ์˜์กดํ•˜๋Š” ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. IMO ๋ฌธ์ œ๋Š” ํŒจํ‚ค์ง• ์ด์™ธ์˜ ์šฉ๋„๋กœ pyproject.toml์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.

PEP 517๊ณผ PEP 518์„ ๋ถ„๋ฆฌํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PEP 518์€ PEP์— ๋Œ€ํ•œ "๊ธฐ๋ณธ๊ฐ’"์ด ๋ฌด์—‡์ธ์ง€ ๋ช…์‹œ ์ ์œผ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐ˜๋ฉด PEP 517 ์€ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

" pyproject.toml ์˜ ์กด์žฌ๊ฐ€ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค"์ „์ฒด์— ๋Œ€ํ•ด ๋ชน์‹œ ํ˜์˜ค๊ฐ ์„ ๋Š๋ผ์ง€ ์•Š์•˜๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ๋Š” ๊ฒฉ๋ฆฌ ๋œ ๋นŒ๋“œ์˜ ์ข…์†์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋„ ์„ ํƒ๋œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ setuptools.build_meta ๊ฐ‘๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ ์ฐจ์ด๋ฅผ ๋‚˜๋ˆ„๊ณ  ๋ฐฑ์—”๋“œ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ setuptools.build_meta_legacy ( setup.py ์˜ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ ํ•จ)๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์˜๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธ์ •์  ์ธ ์„ ํƒ์„ํ–ˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋˜ํ•œ ํ•์˜ ์˜๋„ (๊ทธ๊ฒƒ์ด "๊ธฐ์—…"ํ•์ž…๋‹ˆ๋‹ค ;-)์— ์ฃผ๋ชฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค-๋‚ด ๋ง์€ ํ• ๊ฐœ๋ฐœ์ž๋“ค์ด์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ๋…ผ์˜ํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์ธ ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋“ค๋ฆฐ๋‹ค๋Š” ์ผ๋ฐ˜์ ์ธ ํ•ฉ์˜์— ๋„๋‹ฌํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„์ง ํ™•๊ณ ํ•œ ๊ณ„ํš์€ ์•„๋‹™๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.) PEP 517์„ ํ†ตํ•ด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ์ „๋‹ฌ setup.py ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋น„๊ต์  ๋น ๋ฅด๊ฒŒ ์ „ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์ œ์•ˆ ๋œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด pip 21.0์—์„œ๋งŒ setuptools ๋ฐฑ์—”๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด ์ถ”๊ฐ€๋กœ 2 ๋…„์ด ๋” ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

PEP 517์€ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง„์‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋Š ์‹œ์ ์—์„œ pip ๋Š” setuptools์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ ์ง€์›์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, PEP 517์˜ ์ „์ฒด ์š”์  (์ ์–ด๋„ ์šฐ๋ฆฌ์—๊ฒŒ๋Š”)์ด ๋ฐฑ์—”๋“œ์—์„œ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ชจ๋“  ๋ฐฑ์—”๋“œ๋ฅผ ๋™์ผํ•œ ๊ธฐ๋ฐ˜์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐฑ์—”๋“œ๊ฐ€ ์—†์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ค๊ฑฐ๋‚˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋ ˆ๊ฑฐ์‹œ ์ด์œ ๋กœ ์ธํ•ด setuptools๋กœ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค). ์—ฌ๊ธฐ์„œ ๋…ผ์Ÿ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.

Pip์—๋Š” ํ˜„์žฌ PEP 517 ๊ฒฝ๋กœ์™€ ๊ธฐ์กด setup.py ๊ฒฝ๋กœ์˜ ๋‘ ๊ฐ€์ง€ ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์œ ์ง€ ๊ด€๋ฆฌ ๋ฌธ์ œ์˜ ์›์ธ์ด๋ฉฐ ์ž ์žฌ์  ์ธ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PEP 517 ๊ฒฝ๋กœ์˜ ์‚ฌ์šฉ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด pyproject.toml ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ PEP 517์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค (ํ”„๋กœ์ ํŠธ๊ฐ€ build-backend = setuptools.buid_meta ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋‘๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ํ˜„์žฌ ๋™์ž‘์ด ์—†์œผ๋ฉด ํ™•๋ฅ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. pip์˜ PEP 517 ์ฝ”๋“œ์™€ setuptools์˜ ๋ฐฑ์—”๋“œ ํ…Œ์ŠคํŠธ๋Š” ์˜ค๋žœ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฑฐ์˜ 0์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.) setuptools ๋ฐฑ์—”๋“œ๊ฐ€ ๋ถ€์ ํ•ฉํ•œ ๊ฒฝ์šฐ (๋“œ๋ฌผ๋‹ค๊ณ  ๊ฐ€์ •)๋ฅผ ์ •ํ™•ํžˆ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด --no-use-pep517 ํ˜•์‹์˜ ์˜ตํŠธ ์•„์›ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” setuptools๊ฐ€ setup.py ์™€ ๋ฐฑ์—”๋“œ ์‚ฌ์ด์˜ ์˜๋ฏธ ์  ์ฐจ์ด๋ฅผ ์›ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒ ํ•œ ์‚ฌ๋žŒ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜๋ฏธ ์  ์ฐจ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด --no-use-pep517 ๊ฐ€ ํ•„์š”ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ๊ณ ๋ ค๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ setuptools.build_meta_legacy์™€ ๊ฐ™์€ setuptools์—์„œ "๋”๋ฏธ"PEP 517 ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋ฐฑ์—”๋“œ๋Š” ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ chdirํ•˜๊ณ  setuptools.build_meta๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์ค‘๋‹จ๋˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด์ „ ๋™์ž‘์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

๊ทธ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์†Œํ•œ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฌธ์„œํ™”๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ pip๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ •ํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์ž„์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. setuptools๊ฐ€ ๋ฐฑ์—”๋“œ๋ฅผ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ๋‘ ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๊ทธ๋“ค์ด ์„ ํƒํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์œ„ํ•ด : sys.path ์ˆ˜์ •์„ ๊ตฌํ˜„ํ•˜๋Š” shim์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

https://pypi.org/project/setuptools-localimport/

๋ฐ”๋ผ๊ฑด๋Œ€ ์ด๊ฒƒ์€ ์ž„์‹œ ๋ฐฉํŽธ์œผ๋กœ ์ž‘๋™ํ•˜์—ฌ ์†”๋ฃจ์…˜์œผ๋กœ ์„œ๋‘๋ฅด์ง€ ์•Š๊ณ  ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•˜๊ฒŒ pip 19.0 (PEP 517๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ํ˜œํƒ์„ ํฌํ•จ)์˜ ์ฑ„ํƒ์„ ๋Šฆ์ถ”์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•ด์•ผํ•˜๋Š”์ง€ ๊ณ ๋ฏผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sys.path ์ˆ˜์ •์„ ๊ตฌํ˜„ํ•˜๋Š” shim์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค! ๊ถ๊ทน์  ์ธ ์ˆ˜์ •์— ๊ด€๊ณ„์—†์ด ์ด๊ฒƒ์€ PEP 517 ํ›„ํฌ ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ •๋ง ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. :-)

19.x์—์„œ ๋‚ด pip ๋ฒ„์ „์„ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ˆ˜์ • ํ•œ ๋‹ค์Œ ์„ค์น˜๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ‚ค์ง€๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์˜ˆ : setuptools ์ž์ฒด๋Š” ๋นŒ๋“œ ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ wheel ๋งŒ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

[build-system]
requires = ["wheel"]
build-backend = "setuptools.build_meta"

๋ฌผ๋ก  PEP 517์„ ์ฒ˜๋ฆฌํ•˜๋Š” pip์˜ ์ฝ”๋“œ๊ฐ€ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

PEP 517์—์„œ :

๋ชจ๋“ˆ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ์–ด์จŒ๋“  sys.path์— ์žˆ์ง€ ์•Š๋Š” ํ•œ (์˜ˆ๋ฅผ ๋“ค์–ด PYTHONPATH์— ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ์†Œ์Šค ํŠธ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Python์€ ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์ž๋™์œผ๋กœ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path์— ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ๋ฐฑ์—”๋“œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ด์— ์˜ํ–ฅ์„๋ฐ›์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ (๋‚˜์—๊ฒŒ) ํ”„๋กœ์ ํŠธ๊ฐ€ build-backend ํ•ด๊ฒฐํ•  ๋•Œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ ๋Œ€ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ setuptools๋Š” ์ž์‹ ์„ requires IMO์— ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ค, ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ์ˆœํ™˜ ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šค์Šค๋กœ ๋นŒ๋“œํ•˜๋Š” ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๊ฝค ์ˆœํ™˜ ์ ์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ •์ƒ์ ์ธ ๊ฒฝ์šฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์ด ์„น์…˜์€ ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋นŒ๋“œ ํ™˜๊ฒฝ์˜ sys.path ์—์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

--no-binary :all: ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

@pfmoore ์ƒํ™ฉ์˜ ๋ณ€ํ˜•์€ ํŒจํ‚ค์ง€๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ (bdist์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹˜) sdist์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์–ด ์ผ๋ถ€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๊ฒŒ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

ํŽธ์ง‘ : ๊ฐ™์€

project/
    custom_build.py
    src/
        my_package/
            __init__.py
            ...
    pyproject.toml  
[build-system]
requires = []
build-backend = "custom_build"

# Maybe the custom backend specifies metadata like thisโ€ฆ
[tool.custom_build.metadata]
name = "my-package"
dependencies = []
packages = ["my_package"]

์•„๋งˆ๋„ ํ•ด๊ฒฐ์ฑ…์€ ๋นŒ๋“œ ์ค‘์— ๋ชจ๋“ˆ์„ ์ฐพ์„ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์„ ํƒ์  ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

[build-system]
requires = []
build-backend = "custom_build"
build-backend-findpath = ["build_systems"]   # Put custom_build.py above in a subdirectory.

๊ตฌ์„ฑ ๊ธฐ๋ณธ๊ฐ’์€ [] (๋นˆ ๋ชฉ๋ก)์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ฒฝ๋กœ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์ง€๋งŒ (์ฆ‰, ํ˜„์žฌ ๋™์ž‘๊ณผ ๋™์ผ) ํ”„๋กœ์ ํŠธ๋Š” ๋กœ์ปฌ์—์„œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

build-system ๊ฐ€ ์™„์ „ํžˆ ์ƒ๋žต๋˜๋ฉด ์„น์…˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
build-backend-findpath = [""]

pip๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์•Œ๋ฆฌ๋Š” ๊ฒฝ๊ณ  / ์ •๋ณด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ฌธ์„œ ํŽ˜์ด์ง€ ๋งํฌ ํฌํ•จ).

์ด ์†”๋ฃจ์…˜์˜ ๋˜ ๋‹ค๋ฅธ ์ด์ ์€ ๋ชจ๋“  ๊ฒƒ์ด pip (์‹ค์ œ๋กœ ๊ณต๊ธ‰๋˜๋Š” pep517 ๋ชจ๋“ˆ)์—์„œ ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. setuptools ๋˜๋Š” ๊ธฐ์กด์˜ ๊นจ์ง„ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ƒํ™ฉ์˜ ๋ณ€ํ˜•์€ ํŒจํ‚ค์ง€๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ • ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์‹ค์ œ๋กœ ํ™•์ธํ•œ ํ›„ PEP 517์€ ๋ช…์‹œ ์ ์œผ๋กœ ( build-backend ์„น์…˜์—์„œ) "๋ชจ๋“ˆ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ sys.path์— ์žˆ์ง€ ์•Š๋Š” ํ•œ ์†Œ์Šค ํŠธ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์ธํŠธ ๋ฆฌ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ช…์‹œ ์ ์œผ๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ถฉ๋ถ„ํžˆ ๊ตํ™œํ•œ ์ฝ”๋“œ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PEP 517์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์˜ˆ์ƒ๋˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์„ค์น˜๋˜๋Š” PyPI (๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ธ๋ฑ์Šค)์˜ ํœ ๋กœ ๋ฐฐ์†ก๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋Š” ๋ฒ”์œ„์—์„œ ๋ช…์‹œ ์ ์ด์—ˆ๋‹ค ๋งŒ๋“ค์–ด์ง„ ๋ฐฉ๋ฒ• - ๋‚ด ๊ฐœ์ธ ๊ฐ€์ • ๊ทธ๋“ค์ด PEP (517 ๊ฐœ) ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„, ์˜คํžˆ๋ ค ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ช…๋ น์„ (์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ ํ–ˆ๋‹ค setup.py bdist_wheel ๋˜๋Š” flit build , ์˜ˆ๋ฅผ ๋“ค์–ด ). ๋ฐ˜๋ณต์ ์œผ๋กœ PEP 517 ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ๋‹จ๊ณ„์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Š” pip์˜ PEP 518 ๊ตฌํ˜„์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋ฐฑ์—”๋“œ๊ฐ€ sdist๋กœ ์ œ๊ณต๋˜๊ณ  ์ž์ฒด ๊ตฌ์ถ•์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ž ์žฌ์  ์ธ ํฌํฌ ํญํƒ„ ๊ณต๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ”ํ€ด๋กœ ๋ฐฐํฌ๋˜์ง€ ์•Š์€ ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์ „์— ๋ฐฉ์ง€ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ) ๊ทธ๋Ÿฌ๋‚˜ PyPI์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋งฅ๋ฝ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

tl; dr; ์ œ๊ฐ€ ์ œ๊ณต ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ ๋‹น์‹œ์˜ ํ† ๋ก ์— ๋Œ€ํ•œ ๊ธฐ์–ต๋ฟ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐฐ๊ฒฝ์— ๋Œ€ํ•ด ์•„์นด์ด๋ธŒ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PEP ์ž‘์„ฑ์ž๊ฐ€ ๊ณ ๋ คํ–ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. PEP๊ฐ€ ๊ฐœ๋ฐœ๋˜์—ˆ์„ ๋•Œ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•œ ๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐฉ๊ธˆ ์•„์นด์ด๋ธŒ๋ฅผ๋ณด๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ ,์ด ์งˆ๋ฌธ์€ ์‹ค์ œ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚  ๋ฌด๋ ต (๋˜๋Š” ์ ์–ด๋„ ๊ทธ ์•ˆ์—) ์ž์„ธํžˆ ๋…ผ์˜ ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์•„์นด์ด๋ธŒ๋ฅผ ๋ณด๋Š” ๋ฐ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์›น ์‚ฌ์ดํŠธ๋Š” ์—†์ง€๋งŒ ํ† ๋ก ์ด์ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค (2017 ๋…„ 7 ์›” 28 ์ผ).
https://mail.python.org/pipermail/distutils-sig/2017-July/031109.html
https://www.mail-archive.com/[email protected]/msg26624.html

์˜ˆ๋ฅผ ๋“ค์–ด,์ด ํŠน์ • ์ด๋ฉ”์ผ์€ ๋‹ค์Œ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

PEP 517์— ์ด๋ฏธ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ณ ๋ คํ•  ๋•Œ PEP 517์ด ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ sys.path์— ์žˆ์ง€ ์•Š๋„๋ก ๋ช…๋ นํ•˜๊ณ  python-path์— ๋Œ€ํ•ด์„œ๋งŒ ์•ฝ๊ฐ„์˜ ํ›„์† PEP๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ํŒ๊ฒฐ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ฒŒ๋˜๋ฉด ์•Œ๋ ค ๋“œ๋ฆฌ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ง์ ‘ ์ฝ์–ด ๋ณด๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€! ์ฐพ์•„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

๊ทธ๋ž˜์„œ ์ €๋Š” ๋งŽ์€ ์ด๋ฉ”์ผ์„ ํ›‘์–ด ๋ณด์•˜๊ณ , ์ ์–ด๋„ 8 ์›” 29 ์ผ๋กœ ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Nick์ด sys.path์˜ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ _out_์„ ๋– ๋‚˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://mail.python.org/pipermail/distutils-sig/2017-August/031413.html
(์‚ฌ๋žŒ๋“ค์€ ํ•˜๋‚˜์”ฉ ๋‚˜๋‹ค๋‹ˆ์—˜์˜ ์ฃผ์žฅ์„ ํ™•์‹ ํ•˜๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ๋Ÿฌ๋‚˜ ์œ„์— ๋งํฌ ๋œ ๋™์ผํ•œ ์ด๋ฉ”์ผ์—์„œ Nick์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค. :)

  1. ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง๋กœ ๋ฌธ์ œ๋ผ๋ฉด setup.py ๋ฐฑ์—”๋“œ ๊ตฌํ˜„์˜ ์ผ๋ถ€๋กœ ๊ณง ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด๋ฉ”์ผ์˜ ์ „์ฒด ๋‹จ๋ฝ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ดˆ๊ธฐ์˜ ์ผํ™˜์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š” ์šฐ๋ฆฌ์˜ ๊ธฐํšŒ๋ฅผ ๊ทน๋Œ€ํ™”๊ฐ€ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค ์‹œ์ž‘์œผ๋กœ, "ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ง€์ •๋œ ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ€์ ธ ์˜ค๊ธฐ ์ „์—์˜ sys.path์—์—†๋Š” ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ํ”„๋ŸฐํŠธ ์—”๋“œ"์— ์ฐฌ์„ฑ ํ•ด๊ฒฐ์ด ํ•˜๋‚˜๋ฅผ ๊ฐ„์ฃผ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ ๊ทธ๋ž˜์„œ ์ž ์ •์ ์œผ๋กœ ์Šน์ธ ๋œ API์˜ ์ถœ์‹œ.

์ด ์š”์•ฝ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋‚˜์ค‘์— ์ด๋ฉ”์ผ์ด ์žˆ๋Š”์ง€ ์•„์ง ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ดํ›„ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ด๋ฉ”์ผ์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@cjerdonek์˜ ์•„์นด์ด๋ธŒ๋ฅผ ํŠธ๋กค๋ง ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ํ˜„์žฌ ์ดํ•ด๋ฅผ ์ง„์ˆ  :

  1. ๋งŽ์€ ์‹ค์ œ setup.py ํŒŒ์ผ์€ ํ˜„์žฌ ์‹คํ–‰๋  ๋•Œ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ sys.path ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ค์น˜ ์‹œ๊ฐ„ ์ข…์†์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌ ๋  ๋•Œ ์ด์ƒํ•œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. PEP 517์€ ๋นŒ๋“œ ํ”„๋ŸฐํŠธ ์—”๋“œ๊ฐ€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path ์•”์‹œ ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ๋ช…์‹œ ์ ์œผ๋กœ ๋งํ•ฉ๋‹ˆ๋‹ค (๋ฐฑ์—”๋“œ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ๋งํ•˜์ง€ ์•Š์Œ).
  3. pip 19.0 ๊ณ ๋ ค pyproject.toml ์—†์ด build-system ์„น์…˜์ด ๋™๋“ฑํ•˜๋„๋ก build-system ์„น์…˜๋˜๋„๋ก ์ง€์ • setuptools ๋ฐฑ์—”๋“œ
  4. setuptools PEP 517 ๋ฐฑ์—”๋“œ๋Š” ํ˜„์žฌ sys.path ์—๋„ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์œ„์˜ 1 ๋ฒˆ ์ง€์ ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ ๋ฏธ๋ž˜ ๋ชฉํ‘œ๋กœ ๊ฐ„์ฃผ๋˜๊ธฐ ๋•Œ๋ฌธ์—).
  5. ๊ธฐ๋ณธ ๋™์ž‘์ด ๊ฐœ์„ ๋˜๋Š” ๋™์•ˆ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pip ๋ฅผ 19.0 ๋ฏธ๋งŒ์œผ๋กœ ๊ณ ์ •ํ•˜๊ณ  --no-use-pep517 ์˜ต์…˜์„ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์€ pip ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋นŒ๋“œ๊ฐ€ ์†์ƒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ๋ฐœ๊ฒฌ ํ•œ ํ›„์— ๋งŒ โ€‹โ€‹๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์ ์ธ ๊ด€์ ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์†Œ๊ฐœํ•˜๊ณ ์žํ•˜๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ " build-system ์„น์…˜์ด์—†๋Š” pyproject.toml "์ผ€์ด์Šค์—์„œ setup.py ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ sys.path . ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. pip ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”. ์ด๋Š” ๋™์ž‘ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ์ข…์†์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ถˆํ–‰ํ•œ ๋ถ€์ž‘์šฉ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ํ”„๋ŸฐํŠธ ์—”๋“œ๊ฐ€ ๋™์ผํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. build-system ์„น์…˜์— ๋Œ€ํ•ด pyproject.toml ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  setup.py ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ sys.path ์‚ฝ์ž…ํ•˜์—ฌ setuptools PEP 517 ๋ฐฑ์—”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์„น์…˜๊ณผ ๊ฒฝ๋กœ ํ•ญ๋ชฉ์ด ๋ชจ๋‘ ๋ˆ„๋ฝ ๋œ ๊ฒฝ์šฐ. " build-system ์„น์…˜ ์—†์Œ"์‚ฌ๋ก€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ตœ์†Œ ๋ฒ„์ „์˜ setuptools๋ฅผ ์ง€์ •ํ•ด์•ผํ•˜๋ฏ€๋กœ ์ƒˆ๋กœ์šด pip ๊ฐ€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํ•œ ๋””์ž์ธ ์ฝ”๋„ˆ์— ์šฐ๋ฆฌ ์ž์‹ ์„ ์น ํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ๋กœ 3 ๋‹จ๊ณ„ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. " build-system ํ•ญ๋ชฉ ์—†์Œ"์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ sys.path ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ƒˆ pip ๋ฆด๋ฆฌ์Šค (19.0.1?)๋ฅผ ์ง€๊ธˆ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ด ์‹œ์ ์—์„œ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ํฌ๊ฒŒ ํ•ด๊ฒฐ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. ํ”„๋ŸฐํŠธ ์—”๋“œ๊ฐ€ ์•„์ง ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ sys.path ์ถ”๊ฐ€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒˆ๋กœ์šด setuptools ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ดํ›„ pip ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” "no build-system entry"์ผ€์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํŠน์ˆ˜ ์ผ€์ด์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋Œ€์‹  setuptools ๋Œ€ํ•ด ๋” ์—„๊ฒฉํ•œ ์ตœ์†Œ ๋ฒ„์ „์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์ด ์ œ์•ˆ์€ setuptools PEP 517 ๋ฐฑ์—”๋“œ๊ฐ€ setup.py ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— "์˜ฌ๋ฐ”๋ฅธ"์žฅ์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ pip ์ง์ ‘์ ์œผ๋กœ๋Š” ๊ฐ€๊นŒ์šด ์‹œ์ผ ๋‚ด์— ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ตฌ์กฐ์ ์œผ๋กœ ๋” ๋ฐ”๋žŒ์งํ•œ ์ˆ˜์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ฌธ์ œ๋ฅผ ํฌํ•จ ํ•  ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค.

pypa / setuptools # 1652์— build_meta_legacy ๋ฐฑ์—”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. pip ๊ฐ€ setuptools.build_meta_legacy ๋ฅผ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ •๋ง ์„ ํ˜ธํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ œ๊ณต "๋ ˆ๊ฑฐ์‹œ shim"๋ฐฑ์—”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํŽธํ•œ ์ •๋„๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. setuptools . ๋ฉ”์ธ setuptools PEP 517 ๋ฐฑ์—”๋“œ์—์„œ " python setup.py install ์—๋ฎฌ๋ ˆ์ด์…˜"์ „์ฒด๋ฅผ ๋ฌด๊ธฐํ•œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” setuptools๊ฐ€ TBH์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒํ•ฉ๋‹ˆ๋‹ค. python setup.py bdist_wheel ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ ํ•  ๋•Œ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ผ๋™์„ ์ค„ ๊ฒƒ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ pip wheel ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋ ˆ๊ฑฐ์‹œ๊ฐ€ ์•„๋‹Œ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋กœ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •).

๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚ด ์žฅ๊ธฐ ๊ณ„ํš์€ PEP 517 ํ”„๋ŸฐํŠธ ์—”๋“œ ๋˜๋Š” ์ด์™€ ๋™๋“ฑํ•œ ๊ฒƒ (๋‹ค๋ฅธ ๋ช…๋ น์˜ ๊ฒฝ์šฐ)์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ์„ ์œ„ํ•ด setup.py ์˜ ๋ชจ๋“  ์ง์ ‘ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "๋ชจ๋“  ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ"์„ธ๊ณ„๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ๋‚˜๋Š”์˜ ์˜๋ฏธ ์œ ์ง€ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š์œผ setuptools ํ˜ธ์ถœ๊ณผ ํ˜ธํ™˜ ๋ช…๋ น ํ˜ธ์ถœ python setup.py ๊ฐ™์€ ์ด์œ  PEP๋ฅผ ๋“ค์–ด, 517์€ ํŠนํžˆ ํ”„๋ŸฐํŠธ ์—”๋“œ๊ฐ€์ด๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ๊นจ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์ƒํ™ฉ์„ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆํ‹ฐ ํŒจํ„ด์˜ ์ผ๋ถ€๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ด๊ฒƒ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค. ์ •๋‹นํ•œ ํ•„์š”๊ฐ€์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ์—์„œ sys.path ๋ฅผ ๋งค์šฐ ์‰ฝ๊ฒŒ ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ PEP 517์ด ํ›„ํฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋นŒ๋“œ ๋„๊ตฌ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋””์ž์ธ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง„ ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, flit์—๋Š” flit build ๋“ฑ์˜ ๊ณ ์œ  ํ•œ ๋ช…๋ น ์„ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ช…๋ น์„ ํ๊ธฐ ํ•  ์˜๋„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ PEP 517์˜ ์˜๋„๊ฐ€ ๋„๊ตฌ ๋ณ„ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ฐฑํ•œ ์˜ˆ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฐฑ์—”๋“œ ์ž์ฒด๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์„ค์น˜ ๋ฐ ํ˜„์žฌ ์œ„์น˜ ๋นŒ๋“œ (์ด์ „ ๋นŒ๋“œ์˜ ์•„ํ‹ฐํŒฉํŠธ ์žฌ์‚ฌ์šฉ)์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ (ํ˜„์žฌ ํ‘œ์ค€ํ™”๋˜์ง€ ์•Š์•˜์ง€๋งŒ ํ–ฅํ›„ PEP๊ฐ€ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ)๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋„๊ตฌ๊ฐ€ "build sdist"๋ฐ "build wheel"์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋™์˜๋ฅผ ์–ป๋Š” ๊ฒƒ์€ ๋” ์ด์ƒ ํ‘œ์ค€ ์ž‘์—… ๋ชฉ๋ก์„ ํ™•์žฅ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์ง€ ์•Š์„๋งŒํผ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ PEP 517์ด ํ›„ํฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๋นŒ๋“œ ๋„๊ตฌ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋””์ž์ธ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง„ ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์•ฝ๊ฐ„์˜ ์—ฌ๋‹ด์ž…๋‹ˆ๋‹ค. ๋‚ด ์š”์ ์€ PEP 518์„ ํ•„์š”๋กœํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ชจ๋“  setup.py ๋ช…๋ น์— ๋Œ€ํ•ด ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์กด์žฌํ•˜๋ฉฐ ์‚ฌ๋žŒ๋“ค์„ setup.py ํ˜ธ์ถœ์—์„œ ๋ฉ€์–ด์ง€๊ฒŒํ•จ์œผ๋กœ์จ ๊ฐ€์žฅ ์ž˜ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. flit ๋Š” ํ•˜์œ„ ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด PEP๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ‘œ์ค€์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜. ์˜คํ•ดํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

@ncoghlan ์˜ ์ œ์•ˆ ๋œ ์ „ํ™˜์ด ๋‚˜์—๊ฒŒ ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ๊ณ„์† ์ง„ํ–‰ํ•ฉ์‹œ๋‹ค.

@cjerdonek ์•„์นด์ด๋ธŒ๋ฅผ ์ฐพ์•„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ธฐ์กด ๋ฐฑ์—”๋“œ ๋„์ž…์„ ํ†ตํ•ด setuptools์—์„œ์ด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” PR์ด ์ด๋ฏธ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ. ์œ„์˜ 1 ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ ๋›ฐ์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฒฉ๋ฆฌ ๋œ ๋นŒ๋“œ ํ™˜๊ฒฝ์— setuptools๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ตœ์‹  ๋ฒ„์ „์— ๋”ฐ๋ผ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์˜ 1 ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ ๋›ฐ์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ. ํ˜„์žฌ ์ตœ์†Œ ํ•„์ˆ˜ ๋ฒ„์ „์„ ์ง์ ‘ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ „ํ™˜ ๊ณ„ํš์€ ์‚ฌ๋žŒ๋“ค์ด์— ์ˆ˜๋ช…์ด ๊ธด ์ „ํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์—์„œ ์ž‘์—…์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์— ๊ทผ๊ฑฐ setuptools ์ธก๋ฉด -while @pganssle์˜ ๊ทธ ์ „๋ฉด์— ์•ฝ์† ์ „์šฉ ์ „ํ™˜ ๋ฐฑ์—”๋“œ ์™ธ๋ชจ, ๋‚œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜๋Š” ๋™์•ˆ ํ˜„์ƒ ์œ ์ง€๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฆ‰, pip ์—์„œ PEP 517 ๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จ ํ•  ๊ฒƒ์ด๋ผ๋Š” ๋‚ด ๊ฐ€์ •์€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฑ์—”๋“œ๋Š” ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— (์‹ค์ œ๋กœ๋Š” ๊ณต๊ธ‰ ์—…์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” pep517 ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„์ ‘ ์ˆ˜์ค€์„ ์ถ”๊ฐ€ ํ•จ) sys.path ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ํ›„ํฌ. ์ตœ์†Œํ•œ PYTHONPATH ๋ฅผ ํฌํ•จํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ PYTHONPATH ์„ธํŠธ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ๊ฒฉ๋ฆฌ ์ฝ”๋“œ์—์„œ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ณธ์งˆ์ ์œผ๋กœ pip์— sys.path ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์‚ฌ์†Œํ•œ ์ผ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์กฐ์‚ฌ ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๊ฒƒ ๊ฐ™๊ณ , ํŒจ์น˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ œ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค!).

๊ณ ์ • setuptools ๋ฐฑ์—”๋“œ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์žฅ๊ธฐ ๊ณ„ํš์€ PEP 517 ํ”„๋ŸฐํŠธ ์—”๋“œ ๋˜๋Š” ์ด์™€ ๋™๋“ฑํ•œ ๊ฒƒ (๋‹ค๋ฅธ ๋ช…๋ น์˜ ๊ฒฝ์šฐ)์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ์„ ์œ„ํ•ด setup.py์˜ ๋ชจ๋“  ์ง์ ‘ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pganssle ์•„์•ผ. setup.py ์ ˆ์ฐจ๋Š” ๋ฐ˜๋“œ์‹œ ์ฃฝ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์กด์žฌํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด "์œ ์—ฐ์„ฑ"์€ ๊ณ ํ†ต๊ณผ ์‡ ์•ฝ์˜ ๋์—†๋Š” ์›์ฒœ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. setup.py ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ Python ํŒจํ‚ค์ง•์˜ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

setup.py ๋ฅผ package.json ๋ฐ”๊พธ๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ์„ค๋ช… ํ˜•์‹ ๋Œ€์‹  Python ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ ์–ด๋„ ==1.x ๋ฒ„์ „ ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@techtonik ์ €๋ฆฌ ๊ฐ€์„ธ์š” . ๊ท€ํ•˜์˜ ๋น„ ๊ตฌ์กฐ์  ๊ธฐ์—ฌ๋Š” ๋‚ด๊ฐ€ ์ฐธ์—ฌํ•˜๊ณ ์žˆ๋Š” ์–ด๋–ค ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํ™˜์˜๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

# 6210 ์ž‘์—…์„ ํ†ตํ•ด pip ์ˆ˜์ค€์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€์— ๋Œ€ํ•œ ์œ„์˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ sys.path[0] ๋กœ ์‚ฝ์ž…ํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ •๋ณด์ž…๋‹ˆ๋‹ค. pyproject.toml ๋ฅผ ์ฝ๋Š” ์ฝ”๋“œ์—์„œ PEP 517 ํ›„ํฌ ํ˜ธ์ถœ์ž๊นŒ์ง€ ํ„ฐ๋„๋ง ๋œ ๋‹ค์Œ ๊ฑฐ๊ธฐ์—์„œ ์‹ค์ œ ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ„ฐ๋„๋ง๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ฃผ์š” ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ (์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ ์ด๋ฆ„์— pip._implicit. ์ ‘๋‘์‚ฌ, ํ›„์ž์˜ ๊ฒฝ์šฐ PEP517_SYS_PATH_0 ํ™˜๊ฒฝ ๋ณ€์ˆ˜)์—†์ด ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ์ผ์‹œ์ ์œผ๋กœ ๊ณต๊ธ‰ ์—…์ฒด pep517 ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค setuptools ์˜ ์ ์ ˆํ•œ ์ˆ˜์ •์ด ์ค€๋น„ ๋  ๋•Œ๊นŒ์ง€ pep517 ์ฝ”๋“œ.

๋‚ด ์ „ํ™˜ ๊ณ„ํš์€ ์‚ฌ๋žŒ๋“ค์ด setuptools ์ธก์—์„œ ์˜ค๋ž˜ ์ง€์†๋˜๋Š” ์ „ํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฐ€์ •์— ๊ธฐ๋ฐ˜์„๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @pganssle ์˜ ์ „์šฉ ์ „ํ™˜ ๋ฐฑ์—”๋“œ๋Š” ๊ทธ ์ธก๋ฉด์—์„œ ์œ ๋ง ํ•ด ๋ณด์ด์ง€๋งŒ ๋ง์ด๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•˜๋Š” ๋™์•ˆ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” distutils ๊ฒŒ์‹œ๋ฌผ์—์„œ ์ด๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ˆ˜์ •ํ•˜๊ธฐ
  2. ์ ์ ˆํ•œ ์ „ํ™˜์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœํ•ด์•ผ ํ•  ์˜ณ์€ ์ผ์€ ์ „ํ™˜ ๋กœ์ง์ด ์ œ์ž๋ฆฌ์—์žˆ์„ ๋•Œ๊นŒ์ง€ "pyproject.toml์˜ ์กด์žฌ๊ฐ€ PEP 517์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค"๋กœ์ง์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. setuptools ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ณต์šฉ API์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  pip ์—์„œ๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์œผ๋กœ ํŒ๋ช… ๋œ ์‚ฌํ•ญ์„ ์ง€์—ฐ์‹œํ‚ฌ ๋ฟ์ด๋ผ๋Š” ์ ์„ ๊ณ ๋ คํ•  ๋•Œ setuptools ์˜ ์ง„ํ–‰ ๋ฐฉํ–ฅ์„ ๊ฒ€ํ† ํ•˜๋Š” ๋™์•ˆ pip ์—์„œ ๋น ๋ฅธ ์ˆ˜์ •์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์›๋ž˜ PyInstaller==3.4 ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด # 6210 ๋ฐ # 6212๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

# 6212 ์‹คํŒจ๊ฐ€ ํ…Œ์ŠคํŠธ ์„ค์ • ๋ฌธ์ œ์ธ์ง€ ์—ฌ๋ถ€ ๋˜๋Š” ์‹ค์ œ๋กœ setuptools ์‹œํ—˜ํŒ์— ์ถ”๊ฐ€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์†”๋ฃจ์…˜์— ํ™•์‹ ์„ ๊ฐ–๊ธฐ ์ „์— ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ถ”๊ฐ€ ํ†ตํ•ฉ ์ž‘์—…์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ # 6210์— ์ž์‹ ์ด์žˆ๋‹ค-๊ทธ๊ฒƒ์˜ ์œ ์ผํ•œ ์ž˜๋ชป๋œ ์ ์€ ์šฐ๋ฆฌ๊ฐ€ pip ๊ฐ€ ์˜์›ํžˆ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹ˆ๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๋”์ฐํ•œ ํ˜ธํ™˜์„ฑ ํ•ดํ‚น์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

--no-cache ๊ฐ€ # 6212์—์„œ assert ์‹คํŒจ์— ๋Œ€ํ•œ ์ฑ…์ž„์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  --cache-dir ๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ๋Š” ์„ฑ๊ณต์ ์ธ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/pypa/pip/pull/6212#issuecomment -458166386

(์ €๋Š” ์ˆ˜๋ฉด๊ณผ ์—…๋ฌด๋ฅผ ์œ„ํ•ด ~ 18 ์‹œ๊ฐ„ ๋™์•ˆ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ, ๊ทธ๋™์•ˆ # 6210 ๋˜๋Š” # 6212 ์ค‘ ์–ด๋Š ์ชฝ์ด๋“  ์ƒ๊ด€์—†์ด ์ž์œ ๋กญ๊ฒŒ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค)

์ƒํ™ฉ์„ ๋” ์ž˜ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋ชฉ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. PR์— ๋Œ€ํ•ด @ncoghlan ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!


์ค‘์žฌ ์ฐธ๊ณ  ์‚ฌํ•ญ : ๋˜ํ•œ ๋น„์ƒ์‚ฐ์ ์ธ ๋Œ“๊ธ€ (๋ฐ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต)์„ "Off Topic"์œผ๋กœ ์ˆจ๊ฒผ์œผ๋ฉฐ ํ–ฅํ›„ ํ•ด๋‹น ๋ผ์ธ์˜ ๋ชจ๋“  ๋Œ“๊ธ€์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘์žฌ์— ๋Œ€ํ•ด ํ† ๋ก ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ด๋ฉ”์ผ๋กœ ์ €๋ฅผ ํ•‘ํ•˜์‹ญ์‹œ์˜ค. ์ด ์Šค๋ ˆ๋“œ๋Š” ์ค‘์žฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ์žฅ์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์ค‘๋ณต์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

pep517์„ ์˜ตํŠธ ์ธํ•˜๋”๋ผ๋„ ์ด๋Š” ๋ฐœํ‘œ๋˜์ง€ ์•Š์€ ๋™์ž‘ ๋ณ€๊ฒฝ์ด๋ฏ€๋กœ ์ด๋ฏธ ์˜ตํŠธ ์ธํ•œ ๊ฒฝ์šฐ์—๋„ _ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค _ (์˜ˆ PyInstaller ์ฐธ์กฐ). ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ pep517 ๋นŒ๋“œ์— ๋Œ€ํ•œ ์˜ตํŠธ ์ธ์„ ์„ ์–ธํ•˜๊ณ  _and_ sys.path ์—์„œ ์ฐพ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฒƒ์„ ๋กœ์ปฌ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒฝ์šฐ, pip์— ์˜ํ•œ ๊ฐ€์ •์€ ์—†์ง€๋งŒ (๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ช…์‹œ ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๊ฐ‘์ž๊ธฐ ๋ถ€์„œ์กŒ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ setuptools์— cwd ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ๋Œ€์•ˆ์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ์ด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ pep517๊ณผ pip 19 ์‚ฌ์ด์—์„œ ์ž˜๋ผ๋‚ธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฒ„์ „์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ณ ์ •ํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ ์„ค์น˜๊ฐ€ ์ค‘๋‹จ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ํ–ฅ์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ๊ฒฐ์ • ์ค‘. ์ด ํ† ๋ก ๊ณผ ํ˜„์žฌ ์ œ์•ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” pep517 ๋นŒ๋“œ๊ฐ€ ๋ช…์‹œ ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ pip + setuptools์™€ ํ•จ๊ป˜ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ pipenv์—์„œ ์‹คํŒจํ•œ ์„ค์น˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‹คํŒจ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์‹คํŒจ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ --no-use-pep517 ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์ฆ‰์‹œ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง๊ด€์  ์ผ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Œ์„ ์ง€์ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ ‡๊ฒŒ ๋งํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ๋„์›€์„์ฃผ๊ธฐ ์œ„ํ•ด์ด ๊ฒฉ์ฐจ๋ฅผ ์ขํžˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

(ํŽธ์ง‘ : pganssle, cjerdonek, pfmoore, pradyunsg, ncoghlan ๋ฐ ์ด์— ๋Œ€ํ•ด ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค)

PEP 517์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์˜ˆ์ƒ๋˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋‹ค์šด๋กœ๋“œ๋˜๊ณ  ์„ค์น˜๋˜๋Š” PyPI (๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ธ๋ฑ์Šค)์˜ ํœ ๋กœ ๋ฐฐ์†ก๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ๊ฐ€ ๊ตฌ์ถ• ๋œ ๋ฐฉ๋ฒ•์€ ๋ช…์‹œ ์ ์œผ๋กœ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฐœ์ธ์ ์ธ ์ถ”์ธก์€ PEP 517 ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•˜์œ„ ์ˆ˜์ค€ ๋ช…๋ น (์˜ˆ : setup.py bdist_wheel ๋˜๋Š” flit ๋นŒ๋“œ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ ์œผ๋กœ PEP 517 ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ๋‹จ๊ณ„์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Š” pip์˜ PEP 518 ๊ตฌํ˜„์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋ฐฑ์—”๋“œ๊ฐ€ sdist๋กœ ์ œ๊ณต๋˜๊ณ  ์ž์ฒด ๊ตฌ์ถ•์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ž ์žฌ์  ์ธ ํฌํฌ ํญํƒ„ ๊ณต๊ฒฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ”ํ€ด๋กœ ๋ฐฐํฌ๋˜์ง€ ์•Š์€ ๋ฐฑ์—”๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์ „์— ๋ฐฉ์ง€ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ) ๊ทธ๋Ÿฌ๋‚˜ PyPI์—์„œ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋งฅ๋ฝ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ-์ƒˆ๋กœ์šด setuptools.build_meta_legacy ๊ธฐ๋ณธ๊ฐ’์€ setuptools ์ž์ฒด์˜ ๋ฌธ์ œ์ธ PEP 517 ๋ฐฑ์—”๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์— PEP 517์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฉด @ ๋ฒค์™€ - ํ”ผ์—๋ฅด ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก # 1644, ๊ทธ๊ฒƒ์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค pypa / setuptools์—์—์„œ ์ง€์ ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด pip install --no-binary :all: ์— ๋”ฐ๋ผ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์— setuptools (๋˜๋Š” ์•„๋งˆ๋„ ๋ชจ๋“  PEP 517 ๋ฐฑ์—”๋“œ ๊ณต๊ธ‰์ž).

์ด ์Šค๋ ˆ๋“œ์—์„œ ๋…ผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋…ผ์˜ ํ•  ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์ด ์Šค๋ ˆ๋“œ์—์„œ ๋…ผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋…ผ์˜ ํ•  ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฆ‰๊ฐ์ ์ธ ๋Š๋‚Œ์€ ๋ฌธ์ œ๊ฐ€ --no-binary :all: ๊ฐ€ ์—ฌ๊ธฐ์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ค‘๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์‹ค์ œ๋กœ๋Š” sdist๊ฐ€ ์•„๋‹Œ ๋ฐ”ํ€ด ๋งŒ ๋ฐฐํฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€์žˆ์„ ๋•Œ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌ ํ•จ). ์˜ˆ๋ฅผ ๋“ค์–ด --no-binary :all: ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ด ์Šค๋ ˆ๋“œ์—์„œ ๋” ์‚ฐ๋งŒ ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด.

--no-binary :all: ๋นŒ๋“œ ๋ฐฑ์—”๋“œ ๋นŒ๋“œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ด๊ฒƒ๋งŒํผ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ --no-binary :all: ๋ฅผ ์ง€์ •ํ•˜๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ ๋น„๊ต์  ์‰ฝ๊ฒŒ --no-use-pep517 ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด PR # 6229 :

  1. pyproject.toml ์—์„œ build-system ์„น์…˜์„ PEP 517์— ์ž๋™์œผ๋กœ ์˜ตํŠธ ์ธํ•˜๊ธฐ์œ„ํ•œ ์ดˆ๊ธฐ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ๋“œ๋Š” @pganssle ์˜ ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค ( "๋ชจ๋“  pyproject.toml ํŒŒ์ผ"opt- ์ดํ›„ ๋ฆด๋ฆฌ์Šค)
  2. setup.py ์—์„œ ์ธ์ ‘ ํŒจํ‚ค์ง€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ๋‹ค๋ฃจ๋Š” 3 ๊ฐœ์˜ ์ „์šฉ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€

์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์ž‘์—…์„ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๊ณ  # 6210๊ณผ ๊ฐ™์€ ๋”์ฐํ•œ ํ•ดํ‚น์ด๋‚˜ # 6212์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ์„ค์ • ๋„๊ตฌ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ตœ์†Œํ•œ์˜ ์ˆ˜์ •์ด๋ฏ€๋กœ ๋‚˜๋จธ์ง€ 2 ๊ฐœ์˜ PR์„ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด setuptools.build_meta_legacy ์–ด๋””์— pyproject.toml ์— ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น ์‚ฌ์–‘ ์—†์ด ์ธ์ ‘ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ pip 19.X์—์„œ ์ œ๊ฑฐ ๋  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค๊ณผ ํ•จ๊ป˜ ์–ด๋”˜๊ฐ€์— ๋ฌธ์„œํ™” ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค (X๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋™์˜ํ•ด์•ผ ํ•จ). ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ง€์› ์ค‘๋‹จ (๋‚ด ์ƒ๊ฐ์—๋Š” ์•„๋‹˜)์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•ด์•ผํ•˜๋Š” ์ด์œ ์ด๋ฏ€๋กœ ์ถฉ๋ถ„ํ•œ ํ†ต์ง€์—†์ด ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ–ˆ๋‹ค๋Š” ๋น„๋‚œ์„๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด PR ๋ฐ ์š”์•ฝ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํŽธ์ง‘ 2 : setuptools.build_meta_legacy ์ œ์•ˆ์„ ๋‹ซ์œผ ์…จ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์žฅ๊ธฐ ๊ณ„ํš์ด ๋ฌด์—‡์ธ์ง€ ์ง€๊ธˆ ๋งํ•  ๊ธฐํšŒ๋ฅผ ์žƒ์–ด ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ชจ๋“  ์‚ฌ์šฉ ์ค‘๋‹จ ๊ธฐ๊ฐ„์„ ์—ฐ์žฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ @pfmoore, ๊ทธ๊ฒƒ์€ ์›ํ•˜๋Š” ๋™์ž‘์„ ๋ฐ›๊ณ  ๋‹ค์‹œ๋Š” (์•„๋งˆ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ # 6163 ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ฑฐ์™€ ๊ด€๋ จ๋œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์— ์ ์šฉ๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธ setuptools ์ œ๊ณตํ•˜๋Š” setuptools.build_meta_legacy ).

ํŽธ์ง‘ : ์ง€๊ธˆ์€ # 6212๋ฅผ ๋‹ค์‹œ ์—ด์—ˆ์ง€๋งŒ ํ˜„์žฌ ์‹คํŒจํ•œ ์„ค์น˜ ๋ช…๋ น์„ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ์ „์ฒด build_meta_legacy ํ† ๋ก ์ด ํ•ด๊ฒฐ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋ชฉ์„ ๋‹ค์‹œ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ์€ PEP 517์ด ์ง€์ •๋˜์–ด ์ˆ˜์‹  ๊ฑฐ๋ถ€์— ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด์—ˆ๋‹ค build-system.build-backend ํ•˜์ง€ ์•Š๋Š” ์กด์žฌ build-system ์ง€๊ธˆ ์‚ฌ์ด์˜ ๋ชจ๋“ ์—์„œ, ๊ทธ์™€ 19.1 ์ถœ์‹œ, setuptools ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค build_meta_legacy ๋ฐ pip ์—์„œ๋Š”์ด๋ฅผ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

19.1์—์„œ pip setuptools.build_meta_legacy ์ฐพ์„ ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์ด์ „ ์ฝ”๋“œ ๊ฒฝ๋กœ๋กœ ๋Œ์•„ ๊ฐ€์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ตœ๋Œ€ ์ธ์› ์ˆ˜๋ฅผ ์„ ํƒํ•˜๋ฉด์„œ ์ตœ์†Œํ•œ์˜ ๋ธŒ๋ ˆ์ดํ‚น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ์€ ์‹ค์ œ๋กœ PEP 517์— ๋Œ€ํ•œ ์˜ตํŠธ ์ธ์ด build-system.build-backend๋ฅผ ์ง€์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

... ์ด๋Š” ๋Œ€์ฒด ์‚ฌ๋ก€์—์„œ use_pep517 = False ๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค (์ง€๊ธˆํ•˜๋Š” ์ž‘์—… ์ธ has_pyproject ์„ค์ •ํ•˜๋Š” ๋Œ€์‹ ).

19.1์—์„œ๋Š” pip๊ฐ€ setuptools.build_meta_legacy๋ฅผ ์ฐพ์„ ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ์ด์ „ ์ฝ”๋“œ ๊ฒฝ๋กœ๋กœ ๋Œ์•„ ๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•  ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ ˆ๊ฑฐ์‹œ ๋ฐฑ์—”๋“œ๋ฅผ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•˜๋Š” ์ถฉ๋ถ„ํžˆ ์ตœ์‹  setuptools ๋ฒ„์ „์„ ์ง€์ •ํ•  ๊ฒƒ์ด๋ฉฐ, setuptools๊ฐ€ ํ–ฅํ›„ ๋ฒ„์ „์—์„œ ํ•ด๋‹น ๋ฐฑ์—”๋“œ๋ฅผ ์ œ๊ฑฐ ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ์ˆ˜์šฉ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹จ์ˆœํžˆ ๋น„๋‚œํ•˜์‹ญ์‹œ์˜ค ;-))

์ฐธ๊ณ  : use_pep517 = False ๊ธฐ๋ณธ๊ฐ’์€ # 6229๋กœ ์‹œ์ž‘๋œ ๊ฒƒ์ด์ง€๋งŒ PEP 518 ํ…Œ์ŠคํŠธ์—์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. " build-system.requires is set"์‚ฌ๋ก€ ๋Š” ์ƒ์œ„ ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š๊ณ  ์š”์ฒญ ๋œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋นŒ๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€์ด ๊ฒฝ์šฐ use_pep517 = True ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋‹ค์‹œ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ˆ„๋ฝ [build-system] ํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” pyproject.toml ๋‹จ์ง€์— ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” [tools] ๊ทธ ๋ฐœ์ƒํ•˜๋Š” ์žˆ๋„๋ก ํ…Œ์ด๋ธ” use_pep517 = False ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐ ๋  ์›๋ž˜๋ณด๊ณ  ๋œ ๋ฌธ์ œ์— ๋Œ€ํ•ด์ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์˜ˆ์ƒ ๋œ ์‹คํŒจ๋กœ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ทธ๋Ÿฌ๋ฉด "๋นˆ [build-system] ํ…Œ์ด๋ธ”"์ผ€์ด์Šค๊ฐ€ ๋‚จ๊ฒŒ๋˜๋Š”๋ฐ, ์ด๋Š” ์–ด๋Š ๋ฐฉํ–ฅ ์œผ๋กœ๋“  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์‹ค์ œ๋กœ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ (์™œ requires ๋˜๋Š” build-backend ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  build-system ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„๊นŒ์š”? build-backend ?), ๋‘ ๋ฒˆ์งธ ์˜ˆ์ƒ ์‹คํŒจ ๋งˆ์ปค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์ด์ „์— ์ •์˜ ๋œ PEP 518 ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ํ†ต๊ณผ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ 3์„ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์„ ์„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

use_pep517 = build_system is not None

๋Œ€์‹  :

use_pep517 = build_system is not None and build_system.get('requires', None)

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋น„์–ด ์žˆ์ง€ ์•Š์€ ์š”๊ตฌ ์‚ฌํ•ญ ๋งŒ PEP 517 ๋นŒ๋“œ ๊ฒฉ๋ฆฌ์— ์˜ตํŠธ ์ธํ•ฉ๋‹ˆ๋‹ค (๋น„์–ด ์žˆ์ง€ ์•Š์€ build-system.requires ํ•„๋“œ๊ฐ€ ์ด์ œ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋ฏ€๋กœ ๋„ค ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„ ์˜๋ฏธ ํ•จ).

์—ฌ๊ธฐ์— ์ดˆ๋Œ€ํ•˜์ง€ ์•Š์€ ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ์ด ๋ชจ๋“  ๊ฒƒ์ด sys.path ์— cwd๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋กํ•˜๋Š” ๋งค์šฐ ์ •๊ตํ•œ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ์ž‘๋™ํ•˜๋˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜์–ด ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง„๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•„ ์ฐจ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. UX ๊ด€์ ์—์„œ.

์‚ฌ์†Œํ•œ ์ˆ˜์˜ ์‚ฌ์šฉ์ž์™€ ํŒจํ‚ค์ง€๊ฐ€ ์ด๋กœ ์ธํ•ด ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ์ ์–ด๋„ ์ผ๋ถ€๋Š” [build-system] ์„น์…˜์ด ์ •์˜๋˜์–ด ์žˆ๊ณ  _also_ ์ด์ „ ๋™์ž‘์— ์˜์กดํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ฒ„์ „์„ ๊ณ ์ •ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๊นจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

@techalchemy ์˜ˆ, pip ์˜ ์›๋ž˜ ๊ฐ€์ •์€ setuptools.build_meta ๊ฐ€ setup.py ์˜ ์ง์ ‘ ํ˜ธ์ถœ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ sys.path ๊ด€์ ์—์„œ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/pypa/setuptools/pull/1652์— ์ •์˜ ๋œ setuptools.build_meta_legacy ๋ฐฑ์—”๋“œ๊ฐ€ ํฌํ•จ ๋œ setuptools ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ๋˜๋ฉด # 6212๋ฅผ ์™„๋ฃŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฉ์–ด ํ•ด๊ฒฐ. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ํ˜„์žฌ ETA๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ช…์‹œ ์ ์œผ๋กœ "PEP 517 ๊ธฐ๋ณธ์ด ์•„๋‹Œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด sys.path ์—์„œ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์–ป๊ธฐ ์œ„ํ•ด pip -์ „์šฉ ํ•ด์ƒ๋„๋ฅผ ๊ณ„์† ํƒ์ƒ‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ".

# 6229์—์„œ ๋‚˜๋Š” ๋‹จ์ˆœํžˆ "๊ธฐ๋ณธ์ ์œผ๋กœ PEP 517"์˜ ์ฑ„ํƒ์„ ์—ฐ๊ธฐ ํ•˜๋ผ๋Š” @pganssle ์˜ ์ œ์•ˆ์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, pip 19์˜ ๋˜ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. build-system.requires ๋Š” ์ด์ œ build-system.build-backend ์˜ ์ฒ˜๋ฆฌ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ --no-use-pep517 PEP 518๋„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค (ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ์‹คํŒจ๋ฅผ ์œ ๋ฐœํ•˜๊ณ  ๋นŒ๋“œ๊ฐ€ ์‹คํŒจ ํ•  ๊ฒฝ์šฐ ์‹ค์ œ ์„ค์น˜ ์‹คํŒจ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜๋„ ์žˆ์Œ). ์ข…์†์„ฑ์€ ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

# 6210์—์„œ๋Š” ๋Œ€์‹  ๋กœ์ปฌ๋กœ pep517 ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜์—ฌ sys.path[0] ๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์—ฌ setuptools.build_meta_legacy ๊ฐ€ ํ–ฅํ›„ setutpools ์—์„œ ์ˆ˜ํ–‰ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ž‘์—…์„ ํšจ๊ณผ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. build-system.requires ๋Š” ์—ฌ์ „ํžˆ ์ฒ˜๋ฆฌ๋˜๊ณ  setup.py ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ๋Š” sys.path[0] ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ https://discuss.python.org/t/pep-517-backend-bootstrapping/789/29?u=ncoghlan ์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋ฉฐ @takluyver ๋Š” https://github.com/ ์—์„œ ์ดˆ์•ˆ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. --no-binary :all: ์™€ ํ˜ธํ™˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์…€ํ”„ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋ฐฑ์—”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

AWOL RM์ด๋˜์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋˜ ์ผ์ด ์ผ์–ด๋‚ฌ๋‹ค.

๋‚˜๋Š” ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์— ๋Œ€ํ•œ setuptools-side ์ˆ˜์ •์„ ์„ ํ˜ธํ•˜์ง€๋งŒ # 6210์€ ๋‹จ๊ธฐ ์ˆ˜์ •์œผ๋กœ์„œ ๋‚˜์—๊ฒŒ๋„ ๋ฉ‹์ง€๋‹ค.

@techalchemy ๋ฐ @pradyunsg์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” setuptools-side ์ˆ˜์ •์ด ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. pip ๋‚ด์—์„œ ๋น ๋ฅธ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ฐพ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ์ž‘์—…์— ๊ฐ์‚ฌํ•˜์ง€๋งŒ _build_meta_legacy ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด setuptools ๋ฆด๋ฆฌ์Šค๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๊ทธ๋ ‡๊ฒŒ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? setuptools์—์— ๋น ๋ฅธ ์ˆ˜์ •์„ ํ•ด์ œ์— ๋ฌธ์ œ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (setuptools์— ์‚ฌ์ดํด์ด ๋น ๋ฅธ ๋ฐฉ๋ฒ•์€ ์ฃผ์‚ฌ์œ„์˜๋ณด๋‹ค ๋ฆด๋ฆฌ์Šค)๊ฐ€ ์™œ ๋‚˜๋Š” ๋ชจ๋“  ๋ช…ํ™•์—์„œ ์•„๋‹ˆ์—์š”, ๊ทธ๋ž˜์„œ ๋‚˜๋Š” setuptools์—์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€๋ณด๊ณ ๋˜์ง€ ์•Š์•˜๋‹ค.

๋‹จ๊ธฐ pip-side ์ˆ˜์ •์€ ๊ดœ์ฐฎ์ง€ ๋งŒ setuptools ์ˆ˜์ •์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜์žˆ๋Š”์‹œ๊ธฐ๋ฅผ ๋ช…ํ™•ํžˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”!

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค:

**Collecting pyinstaller==3.4
  Using cached https://files.pythonhosted.org/packages/
a0cc/PyInstaller-3.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command "c:\program files (x86)\
gram files (x86)\microsoft visual studio\shared\python3
requires_for_build_wheel C:\Users\ASUS\AppData\Local\Te
  Traceback (most recent call last):
    File "c:\program files (x86)\microsoft visual studi
process.py", line 207, in <module>
      main()
    File "c:\program files (x86)\microsoft visual studi
process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwarg
    File "c:\program files (x86)\microsoft visual studi
process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requi
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 101, in _get_build_requires
      _run_setup()
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 20, in <module>
      from PyInstaller import __version__ as version, H
  ModuleNotFoundError: No module named 'PyInstaller'**

๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์•„๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ผ์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•?

๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@ jce94 , ์ง€๊ธˆ์€ pip <19๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@altendky ์ •๋ณด

pipenv ์ž‘์—…ํ•˜๋Š” ๋™์•ˆ ์ œ์•ˆ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ƒ‰๋™ pip ์— 18.1 (๊ฐ€)์—์„œ Pipfile ๋ณด์ด๋Š” ๊ฒƒ์€ ๊ฐ™์€ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค pipenv ์ตœ์‹  ํ• ๋ฒ„์ „์„ ๊ฐ•์ œ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ pip๋ฅผ 18.1๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ pipenv ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋‹ค์‹œ ๋งŒ๋“ค๋ฉด Pipenv๋Š” ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋“  ์ตœ์‹  pip๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

@altendky ์Šฌํ”„๊ฒŒ๋„, pipenv (๊ทธ๋ฆฌ๊ณ  ์ œ ์ƒ๊ฐ์— ์‹œ ๋ฅผ ์œ„ํ•ด์„œ๋„) ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ฏธ๋ฆฌ ์ •์˜ ๋œ ๋ฒ„์ „์˜ pip๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ณ ์žฅ๋‚œ ํŒŒ์ดํ”„ ๋ผ์ธ์— ๊ฐ‡ํ˜€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

๋” ์ด์ƒํ•œ ๊ฒƒ์€ ์ผ๊ด€๋˜๊ฒŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Appveyor ์ž‘์—…์„ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ํ†ต๊ณผํ–ˆ์œผ๋ฉฐ ๋‘ ๋ฒˆ์งธ ์ž‘์—…์€ ์™„์ „ํžˆ ๋™์ผํ•˜์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž„ ๋ผ์ธ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ ์‚ฌ๋žŒ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฒˆ ์ฃผ ๋ง์ด๋‚˜ ๋‹ค์Œ ์ฃผ ์ดˆ๊นŒ์ง€ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ค€๋น„ํ•˜๊ณ  ๊ณง pip์˜ ํ›„์† ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ build_meta:__legacy__ ๋ฐฑ์—”๋“œ์—์„œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ setuptools ๋ฒ„์ „ 40.8.0 ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ! ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด PyInstaller๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์‹œํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๊ทธ๋“ค์€
๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋งŒ์กฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ... ๋‚ด๊ฐ€ ์ œ์‹œ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์„œ ๋˜๋Š” PEP
๋ณ€ํ™”๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜?

2019 ๋…„ 2 ์›” 5 ์ผ ํ™”์š”์ผ 10:24 Paul Ganssle < [email protected] ์ž‘์„ฑ :

์ด์ œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ setuptools ๋ฒ„์ „ 40.8.0์„
build_meta : __ legacy__ ๋ฐฑ์—”๋“œ.

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/pypa/pip/issues/6163#issuecomment-460747909 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/ADtXZjnOfu56IYR6VEKK4yowMg3XdcFEks5vKcxBgaJpZM4aNvmP
.

@AlmogCohen ์•„๋‹ˆ์š”, ์ด๊ฒƒ์€ ์ง์ ‘ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ PEP 517 ํ”„๋ŸฐํŠธ ์—”๋“œ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” pip ์—์„œ build_meta:__legacy__ ๋ฅผ ๊ธฐ๋ณธ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉ ํ•  ์ƒˆ ๋ฆด๋ฆฌ์Šค์˜ ETA๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ช‡ ์‹œ๊ฐ„ ์•ˆ์—. :)

๊ณ ์ • ๋œ ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

pip 19.0.2๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค์ž…๋‹ˆ๋‹ค pyinstaller ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„, ํ•์˜ ์ตœ์‹  ๋ฒ„์ „๊ณผ --no-use-pep517

pip install pyinstaller --no-cache-dir --no-use-pep517
Collecting pyinstaller
  Downloading https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz (3.5MB)
     |โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ| 3.5MB 273kB/s
  Installing build dependencies ... done
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Raffaele\AppData\Local\Temp\pip-install-5e9w2p2c\pyinstaller\setup.py", line 20, in <module>
        from PyInstaller import __version__ as version, HOMEPATH, PLATFORM
    ModuleNotFoundError: No module named 'PyInstaller'
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in C:\Users\Raffaele\AppData\Local\Temp\pip-install-5e9w2p2c\pyinstaller\

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ์—ฌ์‹ญ์‹œ์˜ค.

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