ํ๊ฒฝ
๊ธฐ์
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 ์ฐธ์กฐ
์ด๊ฒ์ pyinstaller๊ฐ ์ค์น๋ฅผ ์ํด ์์ฒด์ ์ผ๋ก ๊ฐ์ ธ ์ค๋ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
PyInstaller ์ง์์๊ฒ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ์ฌ 18.1์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ 19.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ฉด์ด ๋ฌธ์ ๋ ๋ฐ์ํฉ๋๋ค. pip ''๊ฐ sys.path์ ์๊ธฐ ๋๋ฌธ์ PyInstaller ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์์
ํ๋ฆ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์ ๋ฃ์ด __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
์ถ๊ฐ ํ์ง ์๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋์ด ํ๊ท์ ๋ํ ๋น ๋ฅธ ์์ ์ ์ ๊ณตํ๋ค๋ฉด ๊ทธ๋ ๊ฒํ๋ ๊ฒ์ด ์ ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ๊ฐ ์ด๊ฒ์ ์์กดํด์๋ ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ฝ:
sys.path
๋น๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ฐ๋ฅํจ).sys.path
์ถ๊ฐ ํ ์ ์์ง๋ง PEP 517์์ด๋ฅผ ํ๋ก ํธ ์๋์ ์ฑ
์์ผ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค.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์ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค. :)
- ์๋ตํ๋ ๊ฒ์ด ์ ๋ง๋ก ๋ฌธ์ ๋ผ๋ฉด setup.py ๋ฐฑ์๋ ๊ตฌํ์ ์ผ๋ถ๋ก ๊ณง ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋ค์์ ์ด๋ฉ์ผ์ ์ ์ฒด ๋จ๋ฝ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ๊ฐ ์ด๊ธฐ์ ์ผํ์ผ๋ก ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ๋ ์ฐ๋ฆฌ์ ๊ธฐํ๋ฅผ ๊ทน๋ํ๊ฐ ์๋ฏธํฉ๋๋ค ์์์ผ๋ก, "ํ์ฌ ๋๋ ํ ๋ฆฌ๊ฐ ์ง์ ๋ ๋ฐฑ์๋๋ฅผ ๊ฐ์ ธ ์ค๊ธฐ ์ ์์ sys.path์์๋ ํ์ธํด์ผํฉ๋๋ค ํ๋ฐํธ ์๋"์ ์ฐฌ์ฑ ํด๊ฒฐ์ด ํ๋๋ฅผ ๊ฐ์ฃผ ํ ์ ์๋ค๊ณ ์๊ฐ ๊ทธ๋์ ์ ์ ์ ์ผ๋ก ์น์ธ ๋ API์ ์ถ์.
์ด ์์ฝ์ ๋ณ๊ฒฝํ๋ ๋์ค์ ์ด๋ฉ์ผ์ด ์๋์ง ์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ดํ ์ฃผ์ ์ ๋ํ ์ด๋ฉ์ผ์ด ๋ง์ง ์์ต๋๋ค.
@cjerdonek์ ์์นด์ด๋ธ๋ฅผ ํธ๋กค๋ง ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ์ ๋ํ ๋์ ํ์ฌ ์ดํด๋ฅผ ์ง์ :
setup.py
ํ์ผ์ ํ์ฌ ์คํ๋ ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๊ฐ sys.path
์ ์๋ค๊ณ ๊ฐ์ ํ์ฌ ํ๋ก์ ํธ๊ฐ ์ค์น ์๊ฐ ์ข
์์ฑ์ผ๋ก ์ฒ๋ฆฌ ๋ ๋ ์ด์ํ ๋ถํธ ์คํธ๋ฉ ๋ฌธ์ ๋ฅผ ์์ฑํฉ๋๋ค.sys.path
์์ ์ ์ผ๋ก ์ถ๊ฐํด์๋ ์๋๋ค๊ณ ๋ช
์ ์ ์ผ๋ก ๋งํฉ๋๋ค (๋ฐฑ์๋์ ๋ํด ์๋ฌด ๊ฒ๋ ๋งํ์ง ์์).pip
19.0 ๊ณ ๋ ค pyproject.toml
์์ด build-system
์น์
์ด ๋๋ฑํ๋๋ก build-system
์น์
๋๋๋ก ์ง์ setuptools
๋ฐฑ์๋setuptools
PEP 517 ๋ฐฑ์๋๋ ํ์ฌ sys.path
์๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค (์์ 1 ๋ฒ ์ง์ ์์ ๋ฒ์ด๋๋ ๊ฒ์ด ๋ฐ๋์งํ ๋ฏธ๋ ๋ชฉํ๋ก ๊ฐ์ฃผ๋๊ธฐ ๋๋ฌธ์).pip
๋ฅผ 19.0 ๋ฏธ๋ง์ผ๋ก ๊ณ ์ ํ๊ณ --no-use-pep517
์ต์
์ ๋ช
์ ์ ์ผ๋ก ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋๋ค์ pip
๋ฅผ ์
๊ทธ๋ ์ด๋ํ๋ฉด ๋น๋๊ฐ ์์๋๋ค๋ ๊ฒ์ ์ฒ์ ๋ฐ๊ฒฌ ํ ํ์ ๋ง โโ๋ฐ๊ฒฌ๋ฉ๋๋ค.๊ธฐ๋ฅ์ ์ธ ๊ด์ ์์ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๊ณ ์ํ๋ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ " build-system
์น์
์ด์๋ pyproject.toml
"์ผ์ด์ค์์ setup.py
ํฌํจํ๋ ๋๋ ํ ๋ฆฌ๊ฐ ์ข
๋ฃ๋์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. ๋ค์ sys.path
. ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
pip
๋ฅผ ๋ฐ์๋ณด์ธ์. ์ด๋ ๋์ ํ๋ฐํธ ์๋๋ฅผ ์ข
์์ ์ผ๋ก ๋ง๋๋ ๋ถํํ ๋ถ์์ฉ์ด ์์ผ๋ฏ๋ก ๋ชจ๋ ํ๋ฐํธ ์๋๊ฐ ๋์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ตฌํํ์ง ์์ผ๋ฉด ๊ธฐ์กด ํ๋ก์ ํธ๊ฐ ์ค์น๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.build-system
์น์
์ ๋ํด pyproject.toml
๋ฅผ ๊ฒ์ฌํ๊ณ setup.py
๋๋ ํฐ๋ฆฌ๋ฅผ sys.path
์ฝ์
ํ์ฌ setuptools
PEP 517 ๋ฐฑ์๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์น์
๊ณผ ๊ฒฝ๋ก ํญ๋ชฉ์ด ๋ชจ๋ ๋๋ฝ ๋ ๊ฒฝ์ฐ. " build-system
์น์
์์"์ฌ๋ก๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ์ต์ ๋ฒ์ ์ setuptools๋ฅผ ์ง์ ํด์ผํ๋ฏ๋ก ์๋ก์ด pip
๊ฐ ์ฌ์ ํ ํ์ํฉ๋๋ค.๋ถํํ ๋์์ธ ์ฝ๋์ ์ฐ๋ฆฌ ์์ ์ ์น ํ์ง ์๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์ต์ข ์ฌ์ฉ์๋ฅผ ์ํด ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ค์ ๋ก 3 ๋จ๊ณ ํด๊ฒฐ์ฑ ์ ์ ์ํฉ๋๋ค.
build-system
ํญ๋ชฉ ์์"์ฌ๋ก์ ๋ํ ์ถ๊ฐ sys.path
ํญ๋ชฉ์ ์ถ๊ฐํ๋ ์ pip
๋ฆด๋ฆฌ์ค (19.0.1?)๋ฅผ ์ง๊ธ ์ํํ์ญ์์ค. ์ด ์์ ์์ ์ต์ข
์ฌ์ฉ์์๊ฒ๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ํฌ๊ฒ ํด๊ฒฐ๋์ด์ผํฉ๋๋ค.setuptools
๋ฆด๋ฆฌ์ค๋ฅผ ์ํํฉ๋๋ค.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 ๊ฒ์๋ฌผ์์ ์ด๊ฒ์ ์ ์ํ์ต๋๋ค. ์ค์ํ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋กํด์ผ ํ ์ณ์ ์ผ์ ์ ํ ๋ก์ง์ด ์ ์๋ฆฌ์์์ ๋๊น์ง "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 :
pyproject.toml
์์ build-system
์น์
์ PEP 517์ ์๋์ผ๋ก ์ตํธ ์ธํ๊ธฐ์ํ ์ด๊ธฐ ์๊ตฌ ์ฌํญ์ ๋ง๋๋ @pganssle ์ ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ตฌํํฉ๋๋ค ( "๋ชจ๋ pyproject.toml
ํ์ผ"opt- ์ดํ ๋ฆด๋ฆฌ์ค)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 ํ
์คํธ์์ ์คํจํ์ต๋๋ค.
build-system.requires
is set"์ฌ๋ก ๋ ์์ ํ๊ฒฝ์ ์ํฅ์์ฃผ์ง ์๊ณ ์์ฒญ ๋ ์ข
์์ฑ์ ์ค์นํ ์ ์๋๋ก ๋น๋ ๊ฒฉ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค. ํ์ฌ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ ๋์ด๋ฅผ ์ํํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์์ด ๊ฒฝ์ฐ use_pep517 = True
๋ฅผ ์ค์ ํ๋ ๊ฒ์ด๋ฏ๋ก์ด๋ฅผ ์ํํ๊ณ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๋ค์ ํต๊ณผํ์ต๋๋ค.[build-system]
ํ๋ฅผ ๋ํ๋ด๋ pyproject.toml
๋จ์ง์ ์ค์ ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ [tools]
๊ทธ ๋ฐ์ํ๋ ์๋๋ก ํ
์ด๋ธ use_pep517 = False
ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐ ๋ ์๋๋ณด๊ณ ๋ ๋ฌธ์ ์ ๋ํด์ด ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ ๋ ์คํจ๋ก ํ์ํ์ต๋๋ค.[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\
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ์ฌ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
PyInstaller๋
--no-use-pep517
์ ์ค์น๋ฉ๋๋ค.