ํ๋์ ์ข
์์ฑ์ ๋ณ๊ฒฝ pipenv install
๋ฅผ ์คํํ๋ ๋ฐ SSD๊ฐ ์๋ Windows 10 ์์คํ
์์ ์ฝ 5๋ถ ์ ๋ ๊ฑธ๋ฆฝ๋๋ค.
๋๋ถ๋ถ์ ์๊ฐ์ Locking [packages] dependencies...
๋ด๋ถ์์ ์๋น๋ฉ๋๋ค.
์ด ๋จ๊ณ์์ 2์ฐจ ๋๋ ๋ ๋์ ๋ณต์ก์ฑ์ด ์๋ ๊ฒ ๊ฐ์ต๋๊น?
์๋์ ๋๋ถ๋ถ์ pipfile์ ํฌํจํ์ง๋ง ์ผ๋ถ ๊ฐ์ธ repo ์ข ์์ฑ์ ์ ๊ฑฐํด์ผ ํ์ต๋๋ค.
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[packages]
alembic = "==0.8.4"
amqp = "==1.4.7"
analytics-python = "==1.2.5"
anyjson = "==0.3.3"
billiard = "==3.3.0.20"
braintree = "==3.20.0"
celery = "==3.1.18"
coverage = "==4.0.3"
docopt = "==0.4.0"
eventlet = "==0.19.0"
flake8 = "==3.0.4"
Flask-Cors = "==2.1.2"
Flask-Login = "==0.3.2"
Flask = "==0.12.1"
funcsigs = "==0.4"
fuzzywuzzy = "==0.12.0"
gcloud = "==0.14.0"
html2text = "==2016.9.19"
itsdangerous = "==0.24"
Jinja2 = "==2.8"
jsonpatch = "==1.15"
jsonschema = "==2.5.1"
PyJWT = "==1.4.2"
kombu = "==3.0.30"
LayerClient = "==0.1.9"
MarkupSafe = "==0.23"
mixpanel = "==4.3.0"
mock = "==1.3.0"
nose-exclude = "==0.4.1"
nose = "==1.3.7"
numpy = "==1.12.1"
pdfrw = "==0.3"
Pillow = "==4.1.0"
pusher = "==1.6"
pycountry = "==1.20"
pycryptodome = "==3.4.5"
pymongo = "==3.2"
PyMySQL = "==0.7.4"
python-dateutil = "<=2.5.1"
python-Levenshtein = "==0.12.0"
python-magic = "==0.4.6"
python-coveralls = "==2.9.0"
pytz = "==2015.6"
raygun4py = "==3.1.2"
"repoze.retry" = "==1.3"
requests = "==2.8.1"
sendgrid = "==2.2.1"
slacker = "==0.7.3"
SQLAlchemy-Enum34 = "==1.0.1"
SQLAlchemy-Utils = "==0.31.6"
SQLAlchemy = "==1.1.9"
typing = "==3.5.2.2"
twilio = "==5.6.0"
Unidecode = "==0.4.19"
voluptuous = "==0.8.11"
Wand = "==0.4.4"
watchdog = "==0.8.3"
Werkzeug = "==0.12.1"
wheel = "==0.24.0"
WTForms = "==2.0.2"
xmltodict = "==0.9.2"
zeep = "==0.24.0"
๋ค์ @Diggsey , ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ๋ณ๊ฒฝ ์ฌํญ์ ์์ฑํ๋ ๋ฐฉ์ ๋๋ฌธ์
๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณํฉํ ์ค๋น๊ฐ ๋์์ง๋ง projects.py
API์ ๋ํด ์ค๋จ๋๋ฏ๋ก ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๊น์ง ๋ณด๋ฅํ ์์ ์
๋๋ค. ๋ฐ๋ผ๊ฑด๋ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ค์ ๋ช ์ฃผ ์์ ์ค๋นํ ๊ฒ์
๋๋ค. ์ง๊ธ์ ๋ฌธ์ ๋ฅผ ์ถ์ ํ๊ธฐ ์ํด ์ด๊ฒ์ ์ด์ด ๋ก๋๋ค.
์ฐ๋ฆฌ๋ PyCon์์ ํจ๊ป ์ด๊ฒ์ ๋ํด ์ง์ฃผํ์ต๋๋ค. ๊ณง ๋ ๋นจ๋ผ์ง ๊ฒ์ ๋๋ค.
์ง๊ธ ๋์๊ฒ ๊ทธ๊ฒ์ ๋๋ฆฐ ๊ฒ์ด ์๋๋ผ ์ผ์ด ๋ถ์ต๋๋ค ...
pipenv install my_package
๋๋ ๊ฐ๋จํ pipenv install
๋ 20๋ถ ํ์ ์๋ฌด ์ถ๋ ฅ๋ ์ ๊ณตํ์ง ์์ต๋๋ค.
ํธ์ง: ํ์ธ, ๋ช ์๊ฐ ํ์๋ ์ฌ์ ํ ์๋ฌด ๊ฒ๋ ์์ต๋๋ค. ๊ฐ์ ๋ฌธ์ ์ธ๊ฐ์? ํ์์๋ ๋๋ฆฌ์ง๋ง 5~10๋ถ ๋ง์ ๋์ด ๋ฌ๋ค.
@NicolasWebDev ๋ , ์ด๋ค ๋ฒ์ ์ pipenv๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์ ๊ฐ์? ๋ํ ์์คํ
์ ๋ณ๋๋ก delegator.py
์ค์น๋์ด ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๋ฒ์ ์
๋๊น? ์ด๊ฒ์ v3.6.0์์ ํด๊ฒฐ๋์ด์ผ ํ๋ ๋ฌธ์ ์์ต๋๋ค.
์์ ๋ชจ๋ ๊ฒ์ด ์ต์ ์ํ๋ผ๋ฉด Pipfile์ ๋ด์ฉ์ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ฐ์ฌ ํด์!
์๋ ํ์ธ์ @nateprewitt , ๋น์ ์ด ๋ง์์ต๋๋ค. ์ ๋ v3.5.x์ ์์์ต๋๋ค. 4.1.1๋ก ์ ๋ฐ์ดํธํ๋ฉด ์ ์ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค. ์ง๊ธ์ ์์ง 5๋ถ์ด ๊ฑธ๋ฆฌ์ง๋ง ์ต์ํ ์ฌ์ฉํ ์ ์์ต๋๋ค!
์์ ์ฃ์กํฉ๋๋ค. pip๋ฅผ ํตํด ์ค์น๋ ํจํค์ง๊ฐ ์๋์ผ๋ก ์
๋ฐ์ดํธ๋์ง ์๋๋ค๋ ์ฌ์ค์ ํญ์ ์์ด๋ฒ๋ ธ์ต๋๋ค.
๊ฐ์ฌ ํด์!
@NicolasWebDev์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ด ๊ธฐ์ฉ๋๋ค! ์ฐ๋ฆฌ๋ ์ด ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ #373์ด ๋ค์ ๋ฆด๋ฆฌ์ค์์ ํ ๊ฑธ์ ๋ ๊ฐ๊น์์ง๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@Diggsey @NicolasWebDev , ์ ๋ ์ด๋ฌํ ์๋ ํฅ์์ด ์ถ๊ฐ๋์ด์ผ ํ๋ 4.1.2๋ฅผ ๋ฐฉ๊ธ ์ถ์ํ์ต๋๋ค. ์ฌ๊ธฐ์์ ํด์ผ ํ ์ผ์ด ์์ง ๋จ์ ์์ง๋ง, ์ด๊ฒ์ ์ ์ด๋ pipenv์ ์ด๊ธฐ ๋ถํธ์คํธ๋ฉ ์๊ฐ์ ๋จ์ถํ ๊ฒ์ ๋๋ค.
@nateprewitt ์
๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ง๊ธ์ pipenv๊ฐ ๋ ๋นจ๋ผ ๋ณด์ด์ง๋ง ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ์๋ pipenv lock
์คํํ๋ ๋ฐ ๋ช ๋ถ์ด ๊ฑธ๋ฆฝ๋๋ค. ์ฌ์ ํ Locking [packages] dependencies...
๊ทธ ์๊ฐ์ ๋๋ถ๋ถ.
@Diggsey , ๊ทธ ๋ง์ ์๊ฐ์ ํด๋น Pipfile์์ ์์ฒญ๋ ์์ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ์ข ์์ฑ์ ๊ณ ์ ํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ํ๋ก์ ํธ๋ก ์ง์ ๊ฐ์ ธ์ค๊ณ ์์ต๋๊น, ์๋๋ฉด ๋ค๋ฅธ ๊ฒ๋ค์ ์ผ๋ถ ์ข ์์ฑ ์๊ตฌ ์ฌํญ์ ๋๊น?
@nateprewitt ์ฐ๋ฆฌ๋ ๊ทธ๋ค ์ค ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ ์ ์์ง๋ง ๋๋ถ๋ถ์ ์ง์ ์ ์ธ ์ข ์์ฑ์ ๋๋ค. ์ ๊ธ ํ์ผ์ ์์ฑํ ๋๋ง๋ค ๋ชจ๋ ์ข ์์ฑ์ ๋ค์ด๋ก๋ํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์์กด์ฑ์ผ๋ก ์ค์นํ๋ ๋ชจ๋ ๊ฒ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ป๊ธฐ ์ํด ๊ฐ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ ๊ธ ์๊ฐ์ ์ค์น๊ฐ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ํ์ธํฉ๋๋ค. ์ด๋ฅผ ํตํด Pipfile.lock์ ๋ชจ๋ ํญ๋ชฉ์ ์ ์ ํ๊ฒ ๊ณ ์ ํ ์ ์์ต๋๋ค. ๋ค์ด๋ก๋ ์์ด๋ ํ์ ์ข ์์ฑ์ ํ์ธํ๊ณ ๋ฒ์ ์ข ์์ฑ ์ ์ธ์ ํด๊ฒฐํ ์ ์๋ ์ ๋ขฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๋๋ถ๋ถ์ ํจํค์ง๊ฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋์ผํ๊ฒ ์ ์ง๋๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ค์ด๋ก๋ํ ํจํค์ง๋ฅผ ์บ์ํ ์ ์์ต๋๊น?
@Diggsey ๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ํด ๊ทธ๊ฒ์ ์กฐ์ฌํ๊ณ ์ถ์ต๋๊น?
์ด๊ฒ์ ์ด๋ฆฌ์์ ์ง๋ฌธ์ผ ์ ์์ง๋ง Pip์ ์ด๋ฏธ ํจํค์ง ์บ์ฑ์ ์ํํ์ง ์์ต๋๊น?
ํ๊ณ ์๋ค๋ ์ธ์์ ๋ฐ๊ณ ์์ต๋๋ค.
pipenv๋ pip ์บ์ ์์คํ ์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์๋๋ฉด ์ฒ์๋ถํฐ ๊ตฌํํด์ผ ํฉ๋๊น?
Pipenv๋ pip๋ง ์คํํ๋ฏ๋ก ์บ์๊ฐ ์๋์ผ๋ก ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค.
๊ฒฐ์ ๋! ์๋ฌผ์ ๋ ์ง๊ธ ์ฌ์ ํฉ๋๋ค.
์ค ๊ฐ์ฌํฉ๋๋ค. ์ง์ฅ์์ ๋ชจ๋ ์ฌ๋์ pipenv๋ก ๋ฐ์ด๋ถ์ด๋ ๊ฒ์ด ๋ด ๋ฑ์ ์งํฑํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ฐ, ์ข์ต๋๋ค. ๋ง ๊ทธ๋๋ก 100๋ฐฐ ์ด์์ ์๋ ํฅ์์ด์๊ณ ์ด์ ๋ฒ์ ์์๋ ํฌ์ฐฉํ์ง ๋ชปํ ์ข ์์ฑ ์ถฉ๋๋ ํฌ์ฐฉํ์ต๋๋ค!
๋ฌด์ ์ ์ฉ ํ ๊ฒ์์
๋๋ค verbose
๋ํ ํ๋๊ทธ pipenv lock
- ๋๋ ๋จ์ง ํธ์งํ์ฌ ์ข
์์ฑ ์ถฉ๋์ ์ง๋จ ํ ์ ์์๋ค piptools/logging.py
๊ธฐ๋ก ์์ธํ ๊ฐ๋ฅํ๊ฒํ์ง๋ง, ๋ด๊ฐ ํ ๋ฒ ๊ทธ๊ฒ์ ์ค ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง์ ๋ํ ๋งค์ฐ ๋ช
ํํ ํ์.
๋๋ ์๋ง๋ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ ๊ฒ์
๋๋ค :) ๊ทธ๊ฒ์ ์ด๋์์ ์์ ๋์์ต๋๊น? ์ต์ ๋ฆด๋ฆฌ์ค๊ฐ 4์ผ ์ ์ด๋ฏ๋ก master
์์ ์ต์ ๋ฒ์ ์ ์ค์นํ์ต๋๋ค. ๊ทธ๋ฌ๋ pipenv install
๋ ์ฌ์ ํ ๋๋ฆฝ๋๋ค.
๋๋ ์๋ํ๋ค:
pipenv
์ค์น โก๏ธ ๐ฐ โก๏ธpipenv
์์ ์ต์ ๋ฒ์ master
์ต์ ์์ ๋ฒ์ (5.3.5.)์ ์ฌ์ฉํ๋ฉด ํ๋์ ํจํค์ง๋ฅผ ์ค์นํ๋ ๋ฐ 3:40์ด ๊ฑธ๋ฆฝ๋๋ค.
โ time pipenv install --dev raven
Installing raven...
Collecting raven
Using cached raven-6.1.0-py2.py3-none-any.whl
Collecting contextlib2 (from raven)
Using cached contextlib2-0.5.5-py2.py3-none-any.whl
Installing collected packages: contextlib2, raven
Successfully installed contextlib2-0.5.5 raven-6.1.0
Adding raven to Pipfile's [dev-packages]...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock!
pipenv install --dev raven 10,11s user 2,77s system 5% cpu 3:40,04 total
master
๋ฒ์ ์ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ ์ค๋จ๋ฉ๋๋ค(ํจํค์ง 1๊ฐ, +10๋ถ)
ํธ์ง: ๋ฐฉ๊ธ ์๋ฃ๋์์ต๋๋ค.
pipenv install graphene_django 8,03s user 1,28s system 1% cpu 11:23,11 total
์ด๋ค ์์ด๋์ด? ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!
ํนํ c ์ปดํ์ผ์ด ์๋ ๊ฒฝ์ฐ ์ข
์์ฑ์ ์ค์นํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. Pipfile
๋ฅผ ๊ณต์ ํ์๊ฒ ์ต๋๊น?
๋๋๋ก ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ์ดํดํ์ง๋ง ์ฒ์๋ถํฐ ๋๋ ธ์ต๋๋ค. ์ ๋ฌธ์ ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
์ฌ๊ธฐ ๋ด Pipfile์ด ์์ต๋๋ค:
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
[dev-packages]
pytest = "*"
pytest-django = "*"
pytest-testmon = "*"
pytest-watch = "*"
django-debug-toolbar = "*"
raven = "*"
[packages]
dj-database-url = "*"
Django = "*"
djangorestframework = "*"
gunicorn = "*"
newrelic = "*"
psycopg2 = "*"
requests = "*"
whitenoise = "*"
graphene-django = "*"
psycopg2๋ ์์ค์์ ์ปดํ์ผ ์ค์ผ ์ ์์ผ๋ฏ๋ก ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ํ๋ฅญํ๊ณ ๋นจ๋ผ์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ ๊ฑฐํ๊ณ ์๋๊ฐ ์ผ๋ง๋ ์ฆ๊ฐํ๋์ง๋ณด์ญ์์ค.
$ pipenv install raven
๋ 1์ด ์ ๋ ๊ฑธ๋ ธ์ต๋๋ค.
$ pipenv install raven์ ์ ์๊ฒ 1์ด์ฒ๋ผ ๊ฑธ๋ ธ์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ค! ์ด๋ป๊ฒ ๋ ์์ธํ ์ถ๋ ฅ์ ์ผค ์ ์์ต๋๊น?
psycopg2
์ ๊ฑฐ๋ฅผ ์๋ํ์ง๋ง๋ณ๋ก ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. pipenv install raven
์คํ์ด ์ ์ ์ค๋จ๋ฉ๋๋ค.
๋๋ ๊ฐ์ง๊ณ ์๋ค:
๊น๋ง๊ท๊ฐ ์๊ฐ์ ์ด์ง ์์์ผ ํ ์ด์ ๊ฐ ์์ต๋๋ค.
$ pip install raven
์์์ $ pipenv shell
ํ๊ณ ๊ฑฐ๊ธฐ์์๋ ๋๋ฆฐ์ง ์๋ ค์ฃผ์ธ์.
pipenv๊ฐ ์ํํ๋ ๋ชจ๋ ์์ ์ pip๋ฅผ ์คํํ๋ ๊ฒ์ด๋ฏ๋ก ์ฌ์ค์ "์์ธ ๋ชจ๋"์ ๋๋ค.
์ฆ์์ ๋๋ค.
โ time pip install raven 19:38 tricoder<strong i="6">@issac</strong>
Requirement already satisfied: raven in /Users/tricoder/.envs/lingui-api-VE1OToiy/lib/python3.6/site-packages
Requirement already satisfied: contextlib2 in /Users/tricoder/.envs/lingui-api-VE1OToiy/lib/python3.6/site-packages (from raven)
noglob pip install raven 0,54s user 0,15s system 76% cpu 0,900 total
pipenv
์คํ pipenv shell
๋ด๋ถ/์ธ๋ถ).
โ time pipenv install raven 19:39 tricoder<strong i="12">@issac</strong>
Installing raven...
Requirement already satisfied: raven in /Users/tricoder/.envs/lingui-api-VE1OToiy/lib/python3.6/site-packages
Requirement already satisfied: contextlib2 in /Users/tricoder/.envs/lingui-api-VE1OToiy/lib/python3.6/site-packages (from raven)
Adding raven to Pipfile's [packages]...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Updated Pipfile.lock!
pipenv install raven 4,49s user 0,46s system 2% cpu 3:21,17 total
@Diggsey --verbose
์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ํ๋ ๋ชจ์์ ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น?
@tricoder42 ๋ ๋๋ฆฐ ๋ถ๋ถ์ด ์ ๊ธ ๋จ๊ณ์ ๋๊น ์๋๋ฉด ์ค์น ๋จ๊ณ์ ๋๊น? ์ ๊ธ์ ์ต์ ๋ฆด๋ฆฌ์ค์์ ํฌ๊ฒ ๊ฐ์ ๋์์ต๋๋ค.
```์
$ time pipenv ์ค์น ๊น๋ง๊ท
๊น๋ง๊ท ์ค์น ์ค...
๊น๋ง๊ท ์์ง
์บ์๋ raven-6.1.0-py2.py3-none-any.whl ์ฌ์ฉ
์๊ตฌ ์ฌํญ์ด ์ด๋ฏธ ์ถฉ์กฑ๋จ: /Users/kennethreitz/.local/share/virtualenvs/pipenv-u9yqWeFK/lib/python3.6/site-packages์ contextlib2(raven์์)
์์ง๋ ํจํค์ง ์ค์น: raven
raven-6.1.0์ ์ฑ๊ณต์ ์ผ๋ก ์ค์นํ์ต๋๋ค.
Pipfile์ [ํจํค์ง]์ ๊น๋ง๊ท ์ถ๊ฐ ์ค...
[dev-packages] ์ข
์์ฑ์ ์ ๊ทธ๋ ์ค...
[ํจํค์ง] ์ข
์์ฑ์ ์ ๊ทธ๋ ์ค...
์
๋ฐ์ดํธ๋ Pipfile.lock!
9.30 ์ค์ 5.49 ์ฌ์ฉ์ 0.42 ์์คํ
50์ 50๋ถ์ ์ค์นํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค:์ ๊ธ
@ tricoder42 ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์ต์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
์ ํํ pipfile๋ก ๋ณต์ ํ๊ฒ ์ต๋๋ค.
๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ๋ค:
โ pipenv --version 19:42 tricoder<strong i="6">@issac</strong>
pipenv, version 5.3.5
โ pipsi upgrade git+https://github.com/kennethreitz/pipenv.git#egg=pipenv 19:45 tricoder<strong i="9">@issac</strong>
Collecting pipenv from git+https://github.com/kennethreitz/pipenv.git#egg=pipenv
Cloning https://github.com/kennethreitz/pipenv.git to /private/var/folders/g9/1wbckv154mbby3tm411z_m340000gn/T/pip-build-se4ao5/pipenv
...
Installing collected packages: pipenv
Found existing installation: pipenv 5.3.5
Uninstalling pipenv-5.3.5:
Successfully uninstalled pipenv-5.3.5
Running setup.py install for pipenv ... done
Successfully installed pipenv-5.3.5
```์
$ ์๊ฐ pipenv ์ค์น
์ ๊ณต๋ ํจํค์ง๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ์ข
์์ฑ์ ์ค์นํฉ๋๋ค.
Pipfile์ /Users/kennethreitz/pipenv/testapp/Pipfile์ ์์ต๋๋ค. ์ด๊ฒ์ ํ๋ก์ ํธ ํ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
Pipfile.lock์ ์ฐพ์ ์ ์์ต๋๋ค. ์์ฑ ์ค...
[dev-packages] ์ข
์์ฑ์ ์ ๊ทธ๋ ์ค...
[ํจํค์ง] ์ข
์์ฑ์ ์ ๊ทธ๋ ์ค...
์
๋ฐ์ดํธ๋ Pipfile.lock!
Pipfile.lock์์ ์ข
์์ฑ ์ค์น ์ค...
[==================================] 22/22 - 00:00:37
58.94 ์ค์ 40.51 ์ฌ์ฉ์ 8.62 ์์คํ
์ pipenv์ ์ฒซ ๋ฒ์งธ ํจํค์ง๋ฅผ ์ค์นํ ๋๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ด๊ฐ ๋ง๋ค๋ ค๊ณ ํ ๊ฒ์ด๋ค pipenv --three
๋์ pipenv --python python3.6
@triccoder42 1์๊ฐ ๋ง์ ๊ตฌ๊ธ ํ์์์
๋๋ Messages.app์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Apple ํ๋ฉด ๊ณต์ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ฅผ ์ถ๊ฐํด! ์ ๋ [email protected]์ ๋๋ค.
ํ์์ ์ฐธ์ฌํ๋ ค๊ณ ํ๋๋ฐ ๊ทธ ์ดํ์ ์ฐธ์ํ ์ ์์ต๋๋ค.
์์ํ! ์ฒ์๋ถํฐ ๋ชจ๋ ๊ฒ์ ์ฒญ์ํ๊ณ ๋ค์ ์ค์นํด ๋ณด๊ฒ ์ต๋๋ค. 1์๊ฐ ์์ ๊ฐ๋ฅํฉ๋๋ค
๊ต์ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๊ฐ ์์๋ผ ๊ฒ์ ๋๋ค. message.app์ ์ ๋ฅผ ์ถ๊ฐํ์ธ์ :)
๋๊ตฐ๊ฐ v11.9.0
๋งค์ฐ ๋๋ฆฐ Locking
๋์์ ๊ฒฝํํ๋ ๊ฒฝ์ฐ v9.0.0
๋ค์ด๊ทธ๋ ์ด๋ํ๋ ๋ฐ 5๋ถ 30์ด๊ฐ ์์๋๋ 1๋ถ 36์ด๊ฐ ์ค์น๋ฉ๋๋ค.
@ryantuck 9.0.3
๋ฅผ ๊ณ ์ ํ๊ธฐ ์ํด ์ด์ ๋ฒ์ ์ ๊ณ ์ ํ๋ ค๊ณ ํ์ง๋ง ์๋์ ๋ํ ์ถ๊ฐ ๋ณด์์ ์๋นํ ์๊ฒ ๋๋ ๊ฒฝ์ฐ --skip-lock
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ ์
--skip-lock
ํ์คํ ์๋๋ฅผ ๋์์ต๋๋ค. pipenv install --system --python=3.6
๊ฐ ์ค์ ๋ก ์ฌ๋ฐ๋ฅธ ์์คํ
ํ์ด์ฌ์ ์ค์น๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์คํ
์ค์น๋ฅผ ์๋ํ๊ธฐ ์ ์ Pipfile.lock
๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค. ์ฌ์ ํ ์๋ํ์ง ์์์ผ๋ฏ๋ก ์ผ๋ฐ ์ด์ pip
์ฌ์ฉ์ผ๋ก ๋์๊ฐ์ง๋ง ์ด ๋ผ์ธ์ ๋ฐ๋ผ ์ง์ ์ด ์๋ค๋ฉด ์ด ์ค๋ ๋์ ๋ค์ ๋๊ธ์ ๋ฌ๊ฒ ์ต๋๋ค.
โsystem
๋ฐ โpython
๋ ์ํธ ๋ฐฐํ์ ์
๋๋ค. ํ์์ ์ต์
์๋ ํญ์ virtualenv๊ฐ ํ์ํฉ๋๋ค.
์, ์ ๊ธ๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. v11.10.0. WSL์ ์ฐ๋ถํฌ.
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
babel = "==2.5.3"
"boto3" = "==1.7.3"
colorama = "==0.3.9"
coreapi = "==2.3.3"
dj-database-url = "==0.5.0"
djangorestframework = "==3.7.7"
django-axes = "==4.0.2"
django-clever-selects = "==0.8.2"
django-crispy-forms = "==1.7.2"
django-choices = "==1.6.0"
django-extra-views = "==0.10.0"
django-filter = "==1.1.0"
django-hijack = "==2.1.7"
django-hijack-admin = "==2.1.7"
django-js-reverse = "==0.8.1"
django-model-utils = "==3.1.1"
django-phonenumber-field = "==2.0.0"
django-polymorphic = "==2.0.2"
django-redis-cache = "==1.7.1"
django-role-permissions = "==2.2.0"
"django-s3direct" = "==1.0.4"
django-static-precompiler = {extras = ["libsass"], version = "==1.8.2"}
django-storages = "==1.6.6"
"django-tables2" = "==1.21.2"
django-webpack-loader = "==0.6.0"
django-widget-tweaks = "==1.4.2"
facebookads = "==2.11.4"
googleads = "==11.0.1"
markdown = "==2.6.11"
phonenumbers = "==8.9.3"
pillow = "==5.1.0"
"psycopg2-binary" = "==2.7.4"
pygments = "==2.2.0"
pyssim = "==0.4"
python-dotenv = "==0.8.2"
pytz = "==2018.4"
raven = "==6.6.0"
sendgrid-django = "==4.2.0"
slacker = "==0.9.65"
termcolor = "==1.1.0"
tqdm = "==4.21.0"
twitter-ads = "==3.0.0"
brotlipy = "==0.7.0"
waitress = "==1.1.0"
whitenoise = "==3.3.1"
Django = "==2.0.4"
[dev-packages]
coverage = "==4.5.1"
selenium = "==3.11.0"
tblib = "==1.3.2"
"flake8" = "==3.5.0"
django-debug-toolbar = "==1.9.1"
django-extensions = "==2.0.6"
[requires]
python_version = "3.6"
Pipfile.lock not found, creatingโฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
Updated Pipfile.lock (7a535c)!
Installing dependencies from Pipfile.lock (7a535c)โฆ
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 92/92 โ 00:01:01
real 8m1.993s
user 5m32.406s
sys 7m15.203s
๋ ๋ฒ์งธ๋ ์ธ ๋ฒ์งธ๋ ์กฐ๊ธ ๋ ๋นจ๋ผ์ผ ํฉ๋๋ค.
์บ์ฑ. ๊ฐ์ ์ด ๋ณด์ด์๋์?
2018๋
4์ 12์ผ ๋ชฉ์์ผ ์ค์ 10:23 Alexander Kavanaugh <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์, ์ ๊ธ๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. v11.10.0. WSL์ ์ฐ๋ถํฌ.
[[์์ค]]url = " https://pypi.python.org/simple "verify_ssl = truename = "pypi"
[ํจํค์ง]babel = "==2.5.3""boto3" = "==1.7.3"colorama = "==0.3.9"coreapi = "==2.3.3"dj-database-url = "== 0.5.0"djangorestframework = "==3.7.7"django-axes = "==4.0.2"django-clever-selects = "==0.8.2"django-crispy-forms = "==1.7.2" django-choices = "==1.6.0"django-extra-views = "==0.10.0"django-filter = "==1.1.0"django-hijack = "==2.1.7"django-hijack- ๊ด๋ฆฌ์ = "==2.1.7"django-js-reverse = "==0.8.1"django-model-utils = "==3.1.1"django-phonenumber-field = "==2.0.0"django- ๋คํ์ฑ = "==2.0.2"django-redis-cache = "==1.7.1"django-role-permissions = "==2.2.0""django-s3direct" = "==1.0.4"django- ์ ์ ์ฌ์ ์ปดํ์ผ๋ฌ = {extras = ["libsass"], ๋ฒ์ = "==1.8.2"}django-storages = "==1.6.6""django-tables2" = "==1.21.2"django-webpack -loader = "==0.6.0"django-widget-tweaks = "==1.4.2"facebookads = "==2.11.4"googleads = "==11.0.1"markdown = "==2.6.11" ์ ํ ๋ฒํธ = "==8.9.3"๋ฒ ๊ฐ = "==5.1.0""psycopg2-binary" = "==2.7.4"pygments = "==2.2.0"pyssim = "==0.4"python-dotenv = "==0.8.2"ํ์ด์ธ = "==2018.4" ๊น๋ง๊ท = "==6.6.0"sendgrid-django = "==4.2.0"slacker = "==0.9.65"termcolor = "==1.1.0"tqdm = "==4.21.0"twitter-ads = "==3.0.0" ๋ธ๋กํ๋ฆฌํผ = "==0.7.0" ์จ์ดํธ๋ฆฌ์ค = "==1.1.0" ํ์ดํธ๋ ธ์ด์ฆ = "==3.3.1" ์ฅ๊ณ = "==2.0.4"
[๊ฐ๋ฐ ํจํค์ง] ์ ์ฉ ๋ฒ์ = "==4.5.1"์ ๋ ๋ = "==3.11.0"tblib = "==1.3.2""flake8" = "==3.5.0"django-debug-toolbar = " ==1.9.1"django ํ์ฅ์ = "==2.0.6"
[ํ์]python_version = "3.6"Pipfile.lock์ ์ฐพ์ ์ ์์ต๋๋ค. ์์ฑ ์คโฆ
[dev-packages] ์ข ์์ฑ ์ ๊ธ ์คโฆ
[ํจํค์ง] ์ข ์์ฑ ์ ๊ธ ์คโฆ
์ ๋ฐ์ดํธ๋ Pipfile.lock(7a535c)!
Pipfile.lock(7a535c)์์ ์ข ์์ฑ ์ค์น ์คโฆ
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ์ค์ 8m1.993์ด
์ฌ์ฉ์ 5m32.406s
์์คํ 7m15.203sโ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/pypa/pipenv/issues/356#issuecomment-380882203 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/ABhjqwIPyHtX0NTVoV1UPYR7HcwYm-2kks5tn42SgaJpZM4NbeoN
.
๊ทธ ์ ์ ์ด๋ฏธ ํจํค์ง๋ฅผ ์ค์นํ์ต๋๋ค. ๋ฐฉ๊ธ ์ ๊ธ ํ์ผ์ ์ ๊ฑฐํ๊ณ ์ค์น๋ฅผ ๋ค์ ์คํํ์ต๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์ป๊ธฐ ์ํด ๋ค์ ํ ๊ฒ์ ๋๋ค.
@jtratner ์์ฐ. ๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค... ์ธ ๋ฒ์งธ ์ด์ ํ์๋ง ์บ์ฑ์ด ์์๋๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
Pipfile.lock not found, creatingโฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
Updated Pipfile.lock (7a535c)!
Installing dependencies from Pipfile.lock (7a535c)โฆ
An error occurred while installing coreapi==2.3.3! Will try again.
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 92/92 โ 00:00:58
Installing initiallyโfailed dependenciesโฆ
Success installing coreapi==2.3.3!โโโ 0/1 โ 00:00:00
โค โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 1/1 โ 00:00:01
real 2m50.218s
user 2m19.438s
sys 5m44.797s
Pipfile.lock not found, creatingโฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
Updated Pipfile.lock (7a535c)!
Installing dependencies from Pipfile.lock (7a535c)โฆ
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 92/92 โ 00:00:55
real 2m32.042s
user 2m6.516s
sys 5m10.219s
@kavdev @jtratner ๋ ํด์๋ฅผ ์บ์ํ๋ ๊ธฐ๋ฅ๋ ๋์ ํ์ฌ ์๋นํ ๊ฐ์ ์ ์ด๋ฃจ์ด์ผ ํฉ๋๋ค.
์ฌ๊ธฐ ์์ด์... 15๋ถ ํ
@giantas ๋์์ด ๋์ง ์์ต๋๋ค. pip ์ค์น ์ pipfile, ์ถ๋ ฅ ๋ฐ ๊ธฐ๊ฐ์ ์ ๊ณตํ์ญ์์ค. ๋ํ ๊ฐ๋ณ ํจํค์ง๋ฅผ ํ ์ ์๋์ง ์ฌ๋ถ.
๋ด ์ปดํจํฐ์์ ์คํํ๋ ค๋ฉด ๊ฝค ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. macOS 10.13.4, pipenv, ๋ฒ์ 11.10.0
๋ค์ด๋ก๋๋ ๊ฑฐ์ ์ฆ์ ์คํ๋์ง๋ง Locking [packages] dependenciesโฆ
์์ ๋ฉ์ถฅ๋๋ค. ์ฌ๊ธฐ์ 2๊ฐ์ ์ข
์์ฑ์ ๋ํด 30๋ถ์ด ์์๋๊ณ ๋ค๋ฅธ 3๊ฐ์ ์ข
์์ฑ์ ๋ํด 6๋ถ์ด ์์๋ฉ๋๋ค. ๋ด ํ๋ก์ ํธ์ ๋ชจ๋ ์ข
์์ฑ์ ์ฌ๊ธฐ์ ๋์ง๋ฉด ์ ๊ธ ๋จ๊ณ์์ ๋ฌด๊ธฐํ ๋ฉ์ถฅ๋๋ค.
pablo<strong i="8">@batman</strong> scanr (develop) $ time pipenv install flask flask_pymongo
Installing flaskโฆ
Looking in indexes: https://pypi.python.org/simple
Collecting flask
Using cached https://files.pythonhosted.org/packages/77/32/e3597cb19ffffe724ad4bf0beca4153419918e7fa4ba6a34b04ee4da3371/Flask-0.12.2-py2.py3-none-any.whl
Collecting Werkzeug>=0.7 (from flask)
Using cached https://files.pythonhosted.org/packages/20/c4/12e3e56473e52375aa29c4764e70d1b8f3efa6682bef8d0aae04fe335243/Werkzeug-0.14.1-py2.py3-none-any.whl
Collecting itsdangerous>=0.21 (from flask)
Collecting Jinja2>=2.4 (from flask)
Using cached https://files.pythonhosted.org/packages/7f/ff/ae64bacdfc95f27a016a7bed8e8686763ba4d277a78ca76f32659220a731/Jinja2-2.10-py2.py3-none-any.whl
Collecting click>=2.0 (from flask)
Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask)
Installing collected packages: Werkzeug, itsdangerous, MarkupSafe, Jinja2, click, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-0.12.2 itsdangerous-0.24
Adding flask to Pipfile's [packages]โฆ
Installing flask_pymongoโฆ
Looking in indexes: https://pypi.python.org/simple
Collecting flask_pymongo
Using cached https://files.pythonhosted.org/packages/fa/71/ab920741dedd605ef4adbd57d0c7d9f43a6b6fe4068604fffbc6f64b2c9c/Flask_PyMongo-0.5.1-py3-none-any.whl
Requirement already satisfied: Flask>=0.8 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from flask_pymongo) (0.12.2)
Collecting PyMongo>=2.5 (from flask_pymongo)
Using cached https://files.pythonhosted.org/packages/5c/7f/1f7240883ec3fa768d7e066c9cbd42ceb42d699ba1a0fb9d231c098a542d/pymongo-3.6.1-cp36-cp36m-macosx_10_6_intel.whl
Requirement already satisfied: click>=2.0 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from Flask>=0.8->flask_pymongo) (6.7)
Requirement already satisfied: itsdangerous>=0.21 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from Flask>=0.8->flask_pymongo) (0.24)
Requirement already satisfied: Werkzeug>=0.7 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from Flask>=0.8->flask_pymongo) (0.14.1)
Requirement already satisfied: Jinja2>=2.4 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from Flask>=0.8->flask_pymongo) (2.10)
Requirement already satisfied: MarkupSafe>=0.23 in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from Jinja2>=2.4->Flask>=0.8->flask_pymongo) (1.0)
Installing collected packages: PyMongo, flask-pymongo
Successfully installed PyMongo-3.6.1 flask-pymongo-0.5.1
Adding flask_pymongo to Pipfile's [packages]โฆ
Pipfile.lock (c202d3) out of date, updating to (3068be)โฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
Updated Pipfile.lock (3068be)!
Installing dependencies from Pipfile.lock (3068be)โฆ
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 32/32 โ 00:00:03
To activate this project's virtualenv, run the following:
$ pipenv shell
real 0m37.816s
user 0m34.556s
sys 0m4.517s
pablo<strong i="5">@batman</strong> scanr (develop) $ time pipenv install gunicorn h5py joblib
Installing gunicornโฆ
Looking in indexes: https://pypi.python.org/simple
Collecting gunicorn
Using cached https://files.pythonhosted.org/packages/64/32/becbd4089a4c06f0f9f538a76e9fe0b19a08f010bcb47dcdbfbc640cdf7d/gunicorn-19.7.1-py2.py3-none-any.whl
Installing collected packages: gunicorn
Successfully installed gunicorn-19.7.1
Adding gunicorn to Pipfile's [packages]โฆ
Installing h5pyโฆ
Looking in indexes: https://pypi.python.org/simple
Collecting h5py
Using cached https://files.pythonhosted.org/packages/69/d5/dff2a8f7658fd87ab3330a0ab47e4363681d8bdf734a495add65a347f5e3/h5py-2.7.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Requirement already satisfied: six in /Users/pablo/.local/share/virtualenvs/scanr-2m6AW0PB/lib/python3.6/site-packages (from h5py) (1.11.0)
Collecting numpy>=1.7 (from h5py)
Using cached https://files.pythonhosted.org/packages/a0/df/fa637677800e6702a57ef09e1d62e42aec3f598fb235f897155d146f2f59/numpy-1.14.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Installing collected packages: numpy, h5py
Successfully installed h5py-2.7.1 numpy-1.14.2
Adding h5py to Pipfile's [packages]โฆ
Installing joblibโฆ
Looking in indexes: https://pypi.python.org/simple
Collecting joblib
Using cached https://files.pythonhosted.org/packages/4f/51/870b2ec270fc29c5d89f85353da420606a9cb39fba4747127e7c7d7eb25d/joblib-0.11-py2.py3-none-any.whl
Installing collected packages: joblib
Successfully installed joblib-0.11
Adding joblib to Pipfile's [packages]โฆ
Pipfile.lock (0d514f) out of date, updating to (a4d15f)โฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
Updated Pipfile.lock (a4d15f)!
Installing dependencies from Pipfile.lock (a4d15f)โฆ
๐ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ 36/36 โ 00:00:03
To activate this project's virtualenv, run the following:
$ pipenv shell
real 6m31.572s
user 1m1.986s
sys 0m11.047s
@pablote ๋๋ฆฐ ์ ์ฅ! ์ด๊ฒ์ ๋ถ๋ถ์ ์ผ๋ก numpy ์ค์น๋ก ์ธํ ๊ฒ์ ๋๋ค. ์์ค์์ ์ ๊ธ ๋๋ ์ด๋ฆฌ์์ ๊ฒ์ผ๋ก ์ปดํ์ผํ๊ณ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ ์ฉํ ์ถ๋ ฅ์ ์ ๊ณตํ๋ฉด ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ํ ์ ์๋ ์ผ์ด ์์ต๋๊น? ์๋๋ฉด ๋ด๊ฐ pipenv๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ฌํ ๋๋ฆฐ ์ ๊ธ ํ์ผ ์๊ฐ์ ๊ฐ๋ ๋ฐ ์ด์ด ์ข์ง ์์ต๋๊น? --skip-lock์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ง๋ง ๊ทธ ๊ธฐ๋ฅ์ ์ํ์ต๋๋ค.
@pablote ๋์ผํ ์ ๊ธ ์์ ์ ๋ค์ ์คํํ๋์ง ํ์ธํ ์ ์์ต๋๊น? ์ฌ์ ํ ๋๋ฆฐ๊ฐ์?
๋ค์ ์คํํ๋ฉด ๊ฑฐ์ ์ฆ์ ์๋ฃ๋๋ฏ๋ก ์๋ก์ด ์ข ์์ฑ์ด ์ถ๊ฐ๋ ๊ฒ์ ์ฒ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐ๋ผ์ ์ค์ ๋ก ๋ก์ปฌ์์ ํด์๋ฅผ ์บ์ฑํ๋ฏ๋ก ์ด๋ค ์ด์ ๋ก๋ ์ฌ๊ธฐ์์ ์์ฒญ๋๊ฒ ๋๋ฆฐ ํด์ ์์ฑ ํ๋ก์ธ์ค์ ๋๋ค...
์ง๋จ์ ๋์์ด ๋ ์ ์๋ ์ ๋ณด๊ฐ ์์ผ๋ฉด ์๋ ค์ฃผ์ญ์์ค. ์ ์ ๋์์ pip + virtualenv + pip-tools๋ก ๋์๊ฐ๊ฒ ์ต๋๋ค./
@pablote ํด์๊ฐ ํ ๋ฒ ์์ผ๋ฉด ๋ค์ ์ ๊ทธ๋ฉด ๊ทธ๋ ๊ฒ ๋๋ฆฌ์ง ์์ต๋๋ค.
์ ์ฉํ ์ถ๋ ฅ์ ์ ๊ณตํ์ญ์์ค. ๋ฐฉ๊ธ #1622 ---์ ๋ฐ๋ผ ํจํค์ง ์ ๊ธ ๋จ๊ณ์์ ์๋ชป๋ ๋ง์ปค ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ด pipenv๋ฅผ 9.1.0์์ 11.10.0์ผ๋ก ์
๊ทธ๋ ์ด๋ํ์ต๋๋ค. ์ด์ ipykernel, pandas, jupyter, numpy๊ฐ ํฌํจ๋ pipfile์ด ์์ต๋๋ค. ๊ฑฐ๊ธฐ์ matplotlib๊ฐ ์๊ณ pipenv install
๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ธ ํ์ผ์ ์คํํ๋ ค๋ ์ต๊ทผ ์๋์ ํจ๊ป locking [packages] dependenciesโฆ
์ 10๋ถ ์ด์ ์์ ์์์ต๋๋ค.
์ถ๋ ฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์งํ๋๊ณ ์๋์ง(์: ์์ค์์ numpy ๋น๋) ๋๋ ๊ทธ๋ฅ ๋งค๋ฌ๋ ค ์๋์ง ์ ์ ์์ต๋๋ค. ๋ด๊ฐ ํ ์ ์๋ ์ต์ ์ top
์์ ์ฝ๊ฐ ๊ณ๋์งํ๊ณ ํ์ด์ฌ ํ๋ก์ธ์ค๊ฐ ์ฃผ๋ณ์ ๋งค๋ฌ๋ ค ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์๋ง๋ ๋ฌด์ธ๊ฐ๋ฅผ ํ๊ณ ์๋ค๊ณ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๋ ๊ฒ์
๋๋ค... ๋ญ๊ฐ ๋นจ๋ฆฌ ์์ง์ด์ง ์์ต๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ด ์์ ์ ๊ธฐ์ฌํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ ์ฉํ ์ถ๋ ฅ์ ์ ๊ณตํ์ญ์์ค. ๋ฐฉ๊ธ #1622 ---์ ๋ฐ๋ผ ํจํค์ง ์ ๊ธ ๋จ๊ณ์์ ์๋ชป๋ ๋ง์ปค ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ด pipenv๋ฅผ 9.1.0์์ 11.10.0์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ์ด์ ipykernel, pandas, jupyter, numpy๊ฐ ํฌํจ๋ pipfile์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์ matplotlib๊ฐ ์๊ณ ์ต๊ทผ์ pipenv install์ ์ฌ์ฉํ์ฌ ์ ๊ธ ํ์ผ์ ์คํํ๋ ค๋ ์๋์ ํจ๊ป [ํจํค์ง] ์ข ์์ฑ์ ์ ๊ทธ๋ ๋ฐ 10๋ถ ์ด์ ์์ ์์์ต๋๋ค.
์์ ํ ์ดํดํ ์ ์๋ ๋ถ๋ง ์ฌํญ์ด๋ฉฐ ์ฌ์ฉ์์๊ฒ ๋ ์ ์ฉํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ ค๊ณ ์ ์ฐ๋ฉฐ ๋ง์ ์์ผ๋ก ์คํ์ด์ค๋ฅผ ํ์ต๋๋ค(์๋ํ๋ฉด ์ถ๋ ฅ์ด ์๋ค๋ ๊ฒ์ด ์ฝ๊ฐ ํผ๋์ค๋ฝ๋ค๋ ๋ฐ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค). 15๋ถ๋ง์ ํฌ๊ธฐํ๊ฒ ์ต๋๋ค. @techalchemy๊ฐ ์ง์ ํ๋ฏ์ด ์บ์๊ฐ ์กฐ๊ธ ๋ ์ฑ์์ง ๋๋ง๋ค ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ง์์ ์ผ๋ก ๋นจ๋ผ์ ธ์ผ ํฉ๋๋ค.
ํ ๊ฐ์ง ์ง๋ฌธ: ๊ณต๊ฐ PyPI๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
@jtratner ์, ๊ณต๊ฐ PyPi ์ฌ์ฉ --- ๊ฒฐ๊ตญ ํฌ๊ธฐํ๊ณ virtualenv๋ฅผ ํ๊ธฐํ๊ณ ์ ๊ฒ์ ๊ตฌ์ถํ์ต๋๋ค. ์ข ์์ฑ์ ํ ๋ฒ์ ํ๋์ฉ ์ค์นํ์ฌ ์ ๊ธ ํ์ผ์ ๋น๋ํ ์ ์์์ต๋๋ค. (ํฅ๋ฏธ๋กญ๊ฒ๋ matplotlib์ด ๊ฐ์ฅ ๋๋ฆฌ๊ณ numpy๋ณด๋ค ๋ ๋์ฉ๋๋ค!)
This may take a long time
์ ๊ฐ์ ๋ฉ์์ง๋ ๋ ๋ช
ํํ ํด๊ฒฐ์ฑ
์ด ๊ฒฐ์ ๋ ๋๊น์ง ์ฌ๋๋ค์ ์์ฌ์ํค๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
15๋ถ์ ์ฌ์ ํ โโ๋ฏธ์น๋ฏ์ด ๊ธธ๋ค. ๋๋ ์์์ ๊ธฐ๋ค๋ฆด ์ ์์์ง ์์ฌ์ค๋ฝ๋ค. @paultopia ๋ ๋ง์ ์ถ๋ ฅ์ ์ํด pipenv lock โverbose
๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๊ฒ๋ณด๋ค ๋๋ฆฌ๋ค๋ ๋๋์ด ์์ง๋ง ์ ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๊ณผ์ํ๊ฐํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ์ปดํจํฐ์์ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณด๋ฉด pipenv๊ฐ ์คํ ์ค์ธ ์ ์ฒด ์๊ฐ์ ํ์ด์ฌ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ ์ ๋ ~15%๋ฅผ ๋์ง ์์ต๋๋ค. ํด์ฑ ํ์ผ๊ณผ ๊ฐ์ด CPU ์ง์ฝ์ ์ธ ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ ๋ ๋ง์ด ์ฌ์ฉํด์ผ ํ ๊ฒ์ ๋๋ค. . ๋ํ, ์ ๋ yarn๊ณผ ๊ฐ์ด ์ข ์์ฑ์ ํด์ํ๋ ๋ค๋ฅธ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํด ๋ณด์๋๋ฐ ์๋นํ ๋น ๋ฆ ๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ๋ฌด์์ํ๋์ง ์์ ๋ด์ผํฉ๋๋ค ...
์ ๊ธ์ ์ฌ์ฉํ ๋ ์๋๊ฐ ๋๋ ค์ง๋ github ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. https://github.com/AndreasPresthammer/slow-pipenv๋ฅผ ์ดํด๋ณด์ญ์์ค. ํ์ง๋ง ์ด๊ฒ์ด ๋์ผํ ๋ฌธ์ ๋ผ๊ณ 100% ํ์ ํ ์๋ ์์ต๋๋ค. repo๋ฅผ ์๋๋ก ๋ด๋ฆฌ๊ณ slow.sh ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ณ ์คํ ์๊ฐ์ ์ฐจ์ด๋ฅผ ๊ด์ฐฐํ์ญ์์ค.
@AndreasPresthammer ๋ฐ๋ผ์ ์คํฌ๋ฆฝํธ๋ ์บ์๋์ง ์์ ์ ๊ธ๊ณผ ์ ๊ธ์ผ๋ก ์ค์นํ๋ ์๊ฐ์ ๋น๊ตํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ์ ๊ธ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๊ฒ์ ๋๋ฆฝ๋๋ค. numpy์ ๊ฒฝ์ฐ ์ปดํ์ผ์ ์๋ฏธํ๋ ๊ณผ๊ฑฐ์ ํด๊ฒฐ์ ์ํด sdists๋ฅผ ์ฌ์ฉํด์ผํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ์ด์ ๋ฐํด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋๊ฐ ๋นจ๋ผ์ง ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ต์ python3.6, pip ๋ฐ pipenv ๋ฒ์ ๊ณผ torch
์ ๊ฐ์ ๊ฐ๋จํ ํจํค์ง ์ค์น์์ ํ์คํ ์ฌ์ ํ ๋ฌธ์ ์
๋๋ค(5๋ถ ์ด์). ์ด ๋ฌธ์ ๊ฐ ๋ซํ ๊ฒ์ผ๋ก ํ์๋์ด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ข
๋ฃ๋๋ ์ด ๋ฌธ์ ์ ๋ํด ์๊ฒฌ์ ๋งํ๊ณ ์ถ์ ์ฌ๋์ pipenv lock --verbose
์ถ๋ ฅ์ ์ ๊ณตํ์ธ์. ์์ค์์ ์ปดํ์ผ๋๊ณ ์ ์์ ์ธ ์กฐ๊ฑด์์ ๋น๋ํ๋ ๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํจํค์ง์ ๊ฒฝ์ฐ ํด์๋๊ฐ ๋๋ฆฌ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ ์๋ณด๋ค ๋๋ฆฐ ๊ฒฝ์ฐ ์์ธ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ป์ผ๋ ค๋ฉด ๋ก๊ทธ๊ฐ ํ์ํฉ๋๋ค.
๋ํ ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ํ๊ฒฝ์ Docker๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ Docker ๋ด๋ถ ์ค์น๊ฐ ํธ์คํธ์ ์ค์นํ ๋๋ณด๋ค ๋๋ฆฌ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ฉ๋ฉด ๋ชจ๋ ํจํค์ง์ ์กฐํฉ์ผ ์๋ ์์ง๋ง ๋๋ณด๋ค ๊ฒฝํ์ด ๋ง์ ์ฌ๋๋ค์ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
๋ค์์ Pipfile
๋ฐ Pipfile.lock
ํฌํจํ pipenv lock --verbose
์ ๋ก๊ทธ์
๋๋ค.
https://gist.github.com/mimischi/6270b7ece566cc571b427baaf1c331d4
@mimischi ํด๊ฒฐ ๊ฒฐ๊ณผ๋ ํธ์คํธ์ ์บ์๋์ง๋ง Docker๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ชจ๋ ํด์๋๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฝ๋๋ค. ํธ์คํธ์ ์บ์ ๋๋ ํ ๋ฆฌ๋ฅผ Docker์ ๋ง์ดํธํ๋ฉด ๋์์ด ๋ฉ๋๋ค. ๋ง์ดํธํด์ผ ํ๋ ๊ฒฝ๋ก๋ฅผ ์ธ๊ธํ๋ ๋ฌธ์ ์ ๋ํ ์ค๋ช ์ด ์์ต๋๋ค. ์ง๊ธ์ ๊ทธ๊ฒ์ ์ฐพ์ ์๊ฐ์ด ์์ง๋ง ๋น์ ์ด ๊ทธ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ํ ๋ ๋ฌธ์์ FAQ ํ์ด์ง ์ ๊ทธ๊ฒ์ ์ ๊ณต
FWIW, ๋ด ๊ฐ๋ฐ ์์๋ฅผ ์ ๊ทธ๋ ๋ฐ ์ด์ 30์ด ๋ฏธ๋ง์ด ๊ฑธ๋ฆฝ๋๋ค. ์ด์ ๋ณด๋ค ํจ์ฌ ์ข์์ก์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์๋
ํ์ธ์, ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๊ธฐ๊ฐ ์ฅํฉํ๋ค
pipenv lock --verbose
Locking [dev-packages] dependenciesโฆ
Using pip: -i https://pypi.python.org/simple
ROUND 1
Current constraints:
pylint
Finding the best candidates:
found candidate pylint==1.9.1 (constraint was <any>)
Finding secondary dependencies:
pylint==1.9.1 requires astroid<2.0,>=1.6, isort>=4.2.5, mccabe, six
New dependencies found in this round:
adding ['astroid', '<2.0,>=1.6', '[]']
adding ['isort', '>=4.2.5', '[]']
adding ['mccabe', '', '[]']
adding ['six', '', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 1: not stable
ROUND 2
Current constraints:
astroid<2.0,>=1.6
isort>=4.2.5
mccabe
pylint
six
Finding the best candidates:
found candidate astroid==1.6.4 (constraint was >=1.6,<2.0)
found candidate isort==4.3.4 (constraint was >=4.2.5)
found candidate mccabe==0.6.1 (constraint was <any>)
found candidate pylint==1.9.1 (constraint was <any>)
found candidate six==1.11.0 (constraint was <any>)
Finding secondary dependencies:
pylint==1.9.1 requires astroid<2.0,>=1.6, isort>=4.2.5, mccabe, six
astroid==1.6.4 requires lazy-object-proxy, six, wrapt
isort==4.3.4 requires -
mccabe==0.6.1 requires -
six==1.11.0 requires -
New dependencies found in this round:
adding ['lazy-object-proxy', '', '[]']
adding ['wrapt', '', '[]']
Removed dependencies in this round:
Unsafe dependencies in this round:
------------------------------------------------------------
Result of round 2: not stable
ROUND 3
Current constraints:
astroid<2.0,>=1.6
isort>=4.2.5
lazy-object-proxy
mccabe
pylint
six
wrapt
Finding the best candidates:
found candidate astroid==1.6.4 (constraint was >=1.6,<2.0)
found candidate isort==4.3.4 (constraint was >=4.2.5)
found candidate lazy-object-proxy==1.3.1 (constraint was <any>)
found candidate mccabe==0.6.1 (constraint was <any>)
found candidate pylint==1.9.1 (constraint was <any>)
found candidate six==1.11.0 (constraint was <any>)
found candidate wrapt==1.10.11 (constraint was <any>)
Finding secondary dependencies:
astroid==1.6.4 requires lazy-object-proxy, six, wrapt
wrapt==1.10.11 requires -
lazy-object-proxy==1.3.1 requires -
six==1.11.0 requires -
pylint==1.9.1 requires astroid<2.0,>=1.6, isort>=4.2.5, mccabe, six
mccabe==0.6.1 requires -
isort==4.3.4 requires -
------------------------------------------------------------
Result of round 3: stable, done
Locking [packages] dependenciesโฆ
๋ค์์ pipenv --version
. pipenv, ๋ฒ์ 2018.05.18
๋ํ ํน์ ์ด์ /์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ ๊ฒฝ์ฐ์๋ pipenv lock
ํ๋ฉด ์์๋์ง๋ง ๋ด๊ฐ ์๋ ํ ๋๋์ง ์์ต๋๋ค. 2์๊ฐ์ ๊ธฐ๋ค๋ ค๋ ์์ง ์์ฑ์ ๊ธฐ๋ฏธ๊ฐ ๋ณด์ด์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์๊ฒ ReadTimeoutError๋ฅผ ๋ ๋ฒ ์ฃผ์์ต๋๋ค. ์ด๊ฒ์ ๋ด๊ฐ ์ด ์ผ์ ํ๋ ์ธ ๋ฒ์งธ์
๋๋ค.
ํ์ด์ฌ 3.6.4 ์ฌ์ฉํ๊ธฐ
ํ๋ก์ ํธ ๋ง๊ฐ์ผ์ด ๊ฐ๊น์์ง๋ฉด ์ด๋ค ๋์์ด๋ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
๋ํ ์ด ๋ฌธ์ ๊ฐ ๋ค์ ์ด๋ฆฌ๋๋ก ํฌํํ์ญ์์ค. ํด๊ฒฐ๋์ง ์์์ต๋๋ค. Docker ์ปจํ ์ด๋ ๋ด์์ ๋ด ํ๋ก์ ํธ๋ฅผ ์ ๊ทธ๋ ๋ฐ 10-20๋ถ ์ ๋ ์์๋ฉ๋๋ค. ๋ํ ์์ฒญ๋ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก Docker๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ง ๋ชปํ๋๋ก ํ ๋น๋์ ๋๋ ค์ผ ํ์ต๋๋ค.
ํด๊ฒฐ ์๋ ๋ฌธ์ ์ ๋ํ ๋์์ด ํ์ํ ๊ฒฝ์ฐ ํ๊ฒฝ์ ๋ํ ์์ Pipfilesmand ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค. ์ด๋ฒ ์ฃผ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ค๋จํ๊ณ ๋ซํ ์ค๋ ๋์ ๋ํ ๊ฐ๋ณ ๋๊ธ์ ์ถ์ ํ ์๊ฐ์ด ์์ง๋ง ์ ๊ณตํ๋ ๊ฒฝ์ฐ Pipfile์ ๋ํด ํ ์คํธํ ์ ์์ต๋๋ค.
@jkp ์ด ํ๋ก์ ํธ์ ๋ชจ๋ ํต์ฌ ๊ฐ๋ฐ์(์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋์ด ์ฒ์๋ถํฐ ๊ทธ๋ ์ง๋ ์์)๊ฐ ์ด ๋ฌธ์ ๋ฅผ ๋งค์ฐ ์ ์๊ณ ์์ผ๋ฉฐ ๋๋ ์๋๋๋ผ๋ ๋น์ ๋งํผ ๋ฌธ์ ๊ฐ ์์์ ๋ณด์ฆํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ฒฐ์ฝ ์ฌ์ด ๋ฌธ์ ๊ฐ ์๋๋ฉฐ Python ํจํค์ง์์ ๋ชจ๋ ๊ฒ์ ๋ถํดํ์ง ์๊ณ ๋ ๊ฐ๋ฅํ ํ ์ฌ์ฉํ ์ ์๋๋ก ์ด๋ฏธ ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ๋์ก์ต๋๋ค. ๋ํ ํ์ฌ ๋ง์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ๋ค๋ฅธ ๋ฌธ์ ์๋ ์ง์คํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ ๋ด๋ ค์ผ ํ ๋ถ๊ฐํผํ ๊ฒฐ์ ์ ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ์ ์ฐ์ ์์๋ฅผ ๋๊ณ ํด๊ฒฐํ ํ์์ผ ๋ค์ ๋จ๊ณ์ ๋ํด ์๊ฐํ๊ธฐ ์์ํ์ฌ ๋ ธ๋ ฅ์ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ๋ ๊ฒ์ ๋๋ค.
์ด์ ๊ทํ์ ์ฐ์ ์์๊ฐ ์ฐ๋ฆฌ์ ๋ค๋ฅผ ์ ์์์ ์ถฉ๋ถํ ์ธ์ ํฉ๋๋ค. ์ด ์ฑ๋ฅ ๋ฌธ์ ๋ ์ํฌํ๋ก์์ ๊ฐ์ฅ ํฐ ๋จ์ผ ๋ฌธ์ ์ผ ์ ์์ผ๋ฉฐ ์ด ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ค์ํ ๋ฌธ์ ๋ก ๊ผฝ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทํ๊ฐ ์ด ๋๊ตฌ์ ์ ์ผํ ์ฌ์ฉ์๊ฐ ์๋๋ฉฐ ์ฐ๋ฆฌ๋ ๊ทํ๋ณด๋ค ๋ชจ๋ ์ฌ๋์ ํ์, ์ฌ์ง์ด ์ฐ๋ฆฌ ์์ ์ ํ์๋ฅผ ์ฐ์ ์ํด์ผ ํจ์ ๋ช ์ฌํ์ญ์์ค. ์ธ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์ ์ ๋ํด ๊ณต์ ํ๊ณ ์๋ ๋ชจ๋ ์ฌ๋์ด ์ด ๋ฌธ์ ์ ๋ํด ๊ณต๊ฐํ๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๊ฐํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ฌด์์ ํด์ผ ํ๋์ง ์๊ฒ ๋๋ฉด, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ ๋ซํ ์ํ๋ก ์ ์ง๋๋ฉฐ, ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ์ถ์ ๊ธฐ์์ ๋ ธ์ด์ฆ ์ญํ ๋ง ํ ๋ฟ์ ๋๋ค. ์ ์ด๋ ์ฐ๋ฆฌ์ ์์ ํ๋ฆ์์๋ ์๋ฌด๋ ์์ ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋ค๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์๋ ์ํฌํ๋ก๋ฅผ ๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ถ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํฉ๋๋ค.
์์ฒญ์ ์ถ์ ํ๊ธฐ ์ํด pipenv
์ net ์ฌ์ด์ mitmproxy
๋ฅผ ์ค์นํ์ฌ ๋๋ฒ๊น
์ ํ์ต๋๋ค. ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์ฌ์ค์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์์ง json-api
์ง์ํ์ง ์๋ ๋น๊ณต๊ฐ pypi
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ํด๋ฐฑ์ด ๋ฉํ๋ฐ์ดํฐ ๋ฑ์ ์ถ์ถํ๊ธฐ ์ํด http ์ธ๋ฑ์ค์ ๋์ด๋ ๋ชจ๋ ๊ฒ์ ๋ฌด์ฐจ๋ณ ๋์
ํ๊ณ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์์
์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง๋๋ค. ์ฌ๊ธฐ์ ํ ๊ฐ์ง ์ ์์ ์ด ํด๋ฐฑ ๋ฐฉ๋ฒ์ด ์ฌ์ฉ ์ค์์ ๊ฒฝ๊ณ ํ๋ ๊ฐ๋จํ ๋ก๊น
์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด ์ด๊ฒ์ ์์๋ด๊ธฐ ์ํด ๋ ๊น์ด ํ๊ณ ๋ค ํ์๊ฐ ์๋๋ก ํ ์ ์์ต๋๋ค.
๋ฌด์ฐจ๋ณ ๋์
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ์ฌ์ฉ ์ค์ธ ์ํคํ
์ฒ์ ๊ด๋ จ์ด ์๋ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ์๋ฅผ ๋ค์ด Linux ์์คํ
์์ win32
๋๋ osx
ํน์ ํ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ต๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ์ํคํ
์ฒ์ฉ์ผ๋ก ๋น๋๋ ๋ฐ์ด๋๋ฆฌ ํจํค์ง๊ฐ ์๋ฌด ์์ฉ์ด ์๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์งํ๊ณ ํผํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
๋๋ ๊ณ์ํด์ ๋๋ฒ๊ทธํ๊ณ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ฐพ๋ ๋๋ก ๋ค์ ๋ณด๊ณ ํ ๊ฒ์ ๋๋ค.
pipenv
๋ฅผ ์ฌ์ฉํ๋ json ์ธํฐํ์ด์ค์์๋ ๋ค๋ฅธ ์ํคํ
์ฒ์ ๊ด๋ จ๋ ํ ํ์ผ์ ๋ํด ๋ถํ์ํ ์์ฒญ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ตฌํ์ ํ์ฌ ๋์ ํ๋ซํผ/์์น์ ๊ด๊ณ์์ด ์ฃผ์ด์ง ๋ฆด๋ฆฌ์ค์ ๋ํด ๋์ด๋ ๋ชจ๋ ํ์ผ์ ๊ฒ์ฌํ๋ค๋ ์ ์์ ๋งค์ฐ ์์งํฉ๋๋ค.
์ต์ ํ ์คํธ ์ผ์ด์ค:
Linux ํธ์คํธ: pipenv install grpcio
๋ค์ ์์ฒญ์ ์์ฑํ์ต๋๋ค( mitmproxy
์ฌ์ฉํ์ฌ ์บก์ฒ).
$ mitmdump -w dump.out
Proxy server listening at http://*:8080
127.0.0.1:62303: clientconnect
127.0.0.1:62303: GET https://pypi.org/simple/setuptools/
<< 200 OK 79.82k
127.0.0.1:62305: clientconnect
127.0.0.1:62305: GET https://files.pythonhosted.org/packages/7f/e1/820d941153923aac1d49d7fc37e17b6e73bfbd2904959fffbad77900cf92/setuptools-39.2.0-py2.py3-none-any.whl
<< 200 OK 554.25k
127.0.0.1:62303: GET https://pypi.org/simple/pip/
<< 200 OK 9.56k
127.0.0.1:62303: GET https://pypi.org/simple/wheel/
<< 200 OK 6.91k
127.0.0.1:62303: clientdisconnect
127.0.0.1:62305: clientdisconnect
127.0.0.1:62307: clientconnect
127.0.0.1:62307: GET https://pypi.org/simple/grpcio/
<< 200 OK 112.03k
127.0.0.1:62309: clientconnect
127.0.0.1:62309: GET https://files.pythonhosted.org/packages/1f/ea/664c589ec41b9e9ac6e20cc1fe9016f3913332d0dc5498a5d7771e2835af/grpcio-1.12.1-cp36-cp36m-manylinux1_x86_64.whl
<< 200 OK 8.57m
127.0.0.1:62307: GET https://pypi.org/simple/six/
<< 200 OK 3.34k
127.0.0.1:62309: GET https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
<< 200 OK 10.45k
127.0.0.1:62309: clientdisconnect
127.0.0.1:62307: clientdisconnect
127.0.0.1:62311: clientconnect
127.0.0.1:62311: GET https://pypi.org/simple/grpcio/
<< 200 OK 112.03k
127.0.0.1:62313: clientconnect
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/1f/ea/664c589ec41b9e9ac6e20cc1fe9016f3913332d0dc5498a5d7771e2835af/grpcio-1.12.1-cp36-cp36m-manylinux1_x86_64.whl
<< 200 OK 8.57m
127.0.0.1:62311: GET https://pypi.org/simple/six/
<< 200 OK 3.34k
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
<< 200 OK 10.45k
127.0.0.1:62315: clientconnect
127.0.0.1:62315: GET https://pypi.org/pypi/six/json
<< 200 OK 5.94k
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/16/d8/bc6316cf98419719bd59c91742194c111b6f2e85abac88e496adefaf7afe/six-1.11.0.tar.gz
<< 200 OK 29.16k
127.0.0.1:62315: GET https://pypi.org/pypi/grpcio/json
<< 200 OK 164.26k
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/5c/73/5e65b81301956bdd32c5e8da691fde3fbd6e61283b65d2bac590b8f43765/grpcio-1.12.1-cp27-cp27m-win32.whl
<< 200 OK 1.35m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/e1/c3/bcce8247da4e6f95a900489b6f7ff3d14d93df40d69875fe4164c1b9544a/grpcio-1.12.1-cp27-cp27mu-manylinux1_i686.whl
<< 200 OK 8.01m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/ed/89/03924c56e9044b0842a014fcc0a81f55975028d1caa9cdd14234a230bc70/grpcio-1.12.1-cp27-cp27m-win_amd64.whl
<< 200 OK 1.35m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/d7/f6/ddeab13c25b8451f05875587801ad87e4e0fc23c4e3eb328c4bd1a80a415/grpcio-1.12.1-cp36-cp36m-linux_armv7l.whl
<< 200 OK 7.77m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/2d/a4/4d1d73c0339e987ea173f44cf62ec6b40fb91e0336c09c960c4a44137552/grpcio-1.12.1-cp35-cp35m-linux_armv7l.whl
<< 200 OK 7.76m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/76/27/b03ec8fc96745cde68d6ec29115f9a444945a6acc45209c5772378cc4d66/grpcio-1.12.1-cp35-cp35m-macosx_10_7_intel.whl
<< 200 OK 1.83m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/30/24/8e247548321e52c266a639b51a838ec19b41fb6bfd27e3bbef018496752e/grpcio-1.12.1-cp27-cp27m-manylinux1_x86_64.whl
<< 200 OK 8.47m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/80/c9/e582b962a4a3aa2684666ff67fc994a042b1b0e444eb6672eb9740f7b59a/grpcio-1.12.1-cp34-cp34m-macosx_10_7_intel.whl
<< 200 OK 1.84m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/a2/25/6d910070a4a07c32633c2376075d5dc03e90f69f855d700e3f73c1affebb/grpcio-1.12.1-cp27-cp27m-macosx_10_12_x86_64.whl
<< 200 OK 1.57m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/33/38/58f3e8d133de1f2e911206ead03799621205079c303ae5b27e7350051f4a/grpcio-1.12.1.tar.gz
<< 200 OK 13.56m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/68/57/da122cbfc1b7815381480b23044fff06b90f58c1be9310e68c2d6b1d623c/grpcio-1.12.1-cp36-cp36m-macosx_10_7_intel.whl
<< 200 OK 1.82m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/c6/b8/47468178ba19143e89b2da778eed660b84136c0a877224e79cc3c1c3fd32/grpcio-1.12.1-cp35-cp35m-manylinux1_x86_64.whl
<< 200 OK 8.55m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/5d/8b/104918993129d6c919a16826e6adcfa4a106c791da79fb9655c5b22ad9ff/grpcio-1.12.1-cp36-cp36m-win_amd64.whl
<< 200 OK 1.37m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/94/6c/02e9cb803cd7b9608c9c1768d86d31c61b088f5b9513a203c10fa7e905d8/grpcio-1.12.1-cp36-cp36m-win32.whl
<< 200 OK 1.12m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/2a/ed/71169dccb7f9250d17031068579832371a72891d8e64891265370ca6e264/grpcio-1.12.1-cp27-cp27mu-linux_armv7l.whl
<< 200 OK 7.68m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/63/38/d73bf5b1ef950dbab8203122b9681137b35012492ecfec56719be109e343/grpcio-1.12.1-cp27-cp27m-manylinux1_i686.whl
<< 200 OK 8.01m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/13/71/87628a8edec5bffc86c5443d2cb9a569c3b65c7ff0ad05d5e6ee68042297/grpcio-1.12.1-cp36-cp36m-manylinux1_i686.whl
<< 200 OK 8.11m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/1d/0d/146582f71161a0074dda2378617ae5f7e2c3d6cf62d4588eb586c1d6b675/grpcio-1.12.1-cp27-cp27mu-manylinux1_x86_64.whl
<< 200 OK 8.47m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/9e/3a/6aceb4fccacf6d2d7d087190c221a90f14b2bdcb56cbee5af24b7050278b/grpcio-1.12.1-cp34-cp34m-win_amd64.whl
<< 200 OK 1.35m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/f9/fa/a0187d220544b744dd3bb0d8b8ec716d130159160bf627415b2880ae599a/grpcio-1.12.1-cp34-cp34m-win32.whl
<< 200 OK 1.35m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/dd/aa/ac8e3c6badf1744f04be7d35fa95dae56df12b956f861285c8cced2a22cb/grpcio-1.12.1-cp34-cp34m-linux_armv7l.whl
<< 200 OK 7.76m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/38/2a/94665daafbcf0214adcf77ad8f5aed8b9dfcbfa871115c7890d88b1b8f3c/grpcio-1.12.1-cp34-cp34m-manylinux1_x86_64.whl
<< 200 OK 8.58m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/0d/33/22ad4a9dcefe330180cdb2d24fdd980af2a7a2dc03af208a408fd48195e0/grpcio-1.12.1-cp35-cp35m-win_amd64.whl
<< 200 OK 1.36m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/b5/13/9e8e5d68a15c51b251e512955a971214fd8425b237e6d6a04f0257c5d090/grpcio-1.12.1-cp34-cp34m-manylinux1_i686.whl
<< 200 OK 8.11m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/21/41/66ab386c65be68b4e907f2cd35223965aea2a086bcd0bd6825999e0bda7c/grpcio-1.12.1-cp35-cp35m-win32.whl
<< 200 OK 1.12m
127.0.0.1:62313: GET https://files.pythonhosted.org/packages/f7/db/fc084f59804a32a8d6efb467896a505f4dc93ea89ec44da856b91f05a5cb/grpcio-1.12.1-cp35-cp35m-manylinux1_i686.whl
<< 200 OK 8.09m
127.0.0.1:62313: clientdisconnect
127.0.0.1:62311: clientdisconnect
127.0.0.1:62315: clientdisconnect
์ผ๋ถ ๋ถํ์ํ ์์ฒญ ๊ณ์ฐ:
๊ธฐํ ํธ์คํธ ์ด์ ์ฒด์ ๋ฐ ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋จํ ํํฐ๋ง์ ์ํํ๋ ๊ฒ์ด ๋น ๋ฅธ ์น๋ฆฌ์ฒ๋ผ ๋ณด์ ๋๊น?
ํธ์คํธ ๋ฐ ์ํคํ ์ฒ๋ณ๋ก ํํฐ๋ง๋ ํญ๋ชฉ์ ์ํ๊ณ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ฌ์ฉ์๋ ํด๋น ํธ์คํธ ๋ฐ ์ํคํ ์ฒ์ ์ค์นํ ์ ์๋ ํด์๊ฐ ํฌํจ๋ ์ ๊ธ ํ์ผ์ ์ํฉ๋๋ค. ์ฐ๋ฆฌ์๊ฒ ์์)
JSON API์ ๊ด๋ จํ์ฌ ํ์ฌ ๋ฆด๋ฆฌ์ค์์๋ ์ค์ ๋ก ์ง์ ์ ์คํ ์ ์์ผ๋ฉฐ ๋ฆด๋ฆฌ์คํ๊ธฐ ์ ์ ์ฝ๋๋ฒ ์ด์ค์์ ๋ค์ ๋นํ์ฑํํ ๊ณํ์
๋๋ค. ๊ด๋ฒ์ํ ํ๋กํ์ผ๋ง์ ์ํํ์ผ๋ฉฐ packaging.version.parse()
๋ํ ์คํจํ ํธ์ถ์ด pipenv ๋ฐํ์์ 20-50% ์ ๋๋ฅผ ์ฐจ์งํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ Pip 10์ ๊ธฐ๋ณธ์ ์ผ๋ก JSON API๋ฅผ ๊ธฐ๋ณธ ํ์ธ์๋ก ์ฌ์ฉํ๋ฏ๋ก pip ์ฌ์ฉ์ ์ค์งํ์ง ์๋ ํ ๊ทธ ์์์ ํ ์ผ์ด ๋ง์ง ์์ต๋๋ค.
๊ฐ์ ๊ฑธ ์ฌ๋ฌ ๋ฒ ๋ค์ด๋ก๋ํด์ผ ํ๋ ๊ฒ ๊ฐ์ฃ ?
ํ ๋ก ์ #2284๋ก ์ฎ๊ฒจ์ผ ํฉ๋๋ค. ์ค์ ๋ก ๋๋ฆฐ ์ ๊ธ ๋ถ๋ถ์
๋๋ค( install
๋ ๋ณธ์ง์ ์ผ๋ก TOML ์กฐ์ + lock
+ sync
). ์ค์น๊ฐ ์๋๋๋ค.
๋จ์ผ ์์น์ ๋ํ ์ ๊ธ๊ณผ ๊ด๋ จํ์ฌ. ๋์์ธ ์ ํ์ ์ดํดํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํธ์คํธ ์ํคํ ์ฒ์ ๋ํด์๋ง ์ ๊ธ ์ ์๋๋ก ํ๋๊ทธ๋ฅผ ์ ๋ฌํ๋ ์ต์ ์ด ์์ ์ ์์ต๋๊น? ์ด๊ฒ์ ์๊ฐ๊ณผ ์ผ๋ถ ์ฌ์ฉ ์ฌ๋ก์ ๋์ญํญ ์ธก๋ฉด์์ ์๋นํ ์ค์ํ ์ต์ ํ๊ฐ ๋ ๊ฒ์ ๋๋ค.
@techalchemy ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. packaging.version.parse()
์ฐพ๊ธฐ๊ฐ ์ข์ ๋ฆฌ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ์ง์ ์ ๋ ๋ง์ ์์์ ๋ฃ์ ์ ์์ต๋๊น?
JSON API์ ๊ด๋ จํ์ฌ ํ์ฌ ๋ฆด๋ฆฌ์ค์์๋ ์ค์ ๋ก ์ง์ ์ ์คํ ์ ์์ผ๋ฉฐ ๋ฆด๋ฆฌ์คํ๊ธฐ ์ ์ ์ฝ๋๋ฒ ์ด์ค์์ ๋ค์ ๋นํ์ฑํํ ๊ณํ์ ๋๋ค.
์ ๋นํ์ฑํ ํ ๊ณํ์ธ์ง ์ดํดํ์ง ๋ชปํ์ต๋๋ค.
@jkp JSON API์ ๊ด๋ จํ์ฌ ๊ฐ์ฅ ์ ์ค๊ณ๋ ๊ฒ์ ์๋๋ผ๊ณ ํฉ์๋ค. ์ฐ๋ฆฌ์๊ฒ๋ ๊ฐ๋จํ API ๊ฐ ํจ์ฌ ๋ ์ ํฉํฉ๋๋ค. ๋นํ์ฑํํ๋ฉด API๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ๋จํ API๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
Pyspark๋ฅผ ์ค์นํ๋ ๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
๋ง์ด ํํ์ผ -
[[source]]
name = "pypi"
verify_ssl = true
url = "https://pypi.org/simple"
[dev-packages]
pylint = "*"
pyspark = "*"
[requires]
python_version = "3.5"
์ ์ถ๋ ฅ -
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
์์ ๋ง์ง๋ง ์ค์์ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋์์ต๋๋ค.
15~20๋ถ ํ ์ข
๋ฃ
pipenv, ๋ฒ์ 2018.7.1
@keshavkaul PySpark๋ ๋งค์ฐ ์ปค์ ๋ค์ด๋ก๋ํ๋ ๋ฐ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์๊ฐ์ ์ฃผ๋ฉด ๋์ค์ ํจ์ฌ ๋์์ง ๊ฒ์ ๋๋ค(Pipenv๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๊ธฐ ๋๋ฌธ์).
(๋๋ ๊ฐ๋ฐ์์๊ฒ ํ ๋ฐฐํฌํ์ ์ถ์ํ๋๋ก ์ด๊ตฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๊ฐ์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.)
ํฅํ ๋ฐฉ๋ฌธ์๋ฅผ ์ํ ์ฐธ๊ณ ์ฌํญ: ๋๋ฆฐ ์ค์น ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ์ง ๋ง์ญ์์ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ๋๋ฆด ์ ์๋ค๋ ๊ฒ์ ์๋๋ค. ๋๋ฆฐ ์ด์ ๋ฅผ ์๊ณ ์์ต๋๋ค. ๊ทํ์ ๊ฒฐ๊ณผ๋ ์ด ์ฃผ์ ์ ์๋ฌด๊ฒ๋ ์ถ๊ฐํ์ง ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ ์ค์ apt-get ๋๋ wget(๋ค์ด๋ก๋ ์๋, ๋ค์ด๋ก๋ํ ํฌ๊ธฐ, ์ด ํฌ๊ธฐ)๊ณผ ๊ฐ์ ์ผ๋ถ ์ ๋ณด ๋๋ ์งํ๋ฅ ํ์์ค์ ๊ฐ์ง ์ ์์ต๋๊น?
๋๋ ์ด๊ฒ์ด ์ฌ๊ธฐ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. pipenv๋ ์ ์๊ฒ ๋๋ฆฐ ๊ฒ์ฒ๋ผ ๋ณด์์ง๋ง ๊ทธ๊ฒ์ ๋จ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋์์ต๋๋ค. pipenv๊ฐ ํ์ผ์ ๋ค์ด๋ก๋ํ๊ณ ์๊ณ ์ผ๋ง๋ ๋ง์ด ์ด๋ฏธ ๋ค์ด๋ก๋๋์๋์ง, ์ด๋ค ์๋์ธ์ง ๋ฑ์ ์ดํดํ๊ธฐ ์ํด ์์คํ
๋ชจ๋ํฐ๋ฅผ ์ด์ด์ผ ํ์ต๋๋ค.
hava ๋์ผํ ๋ฌธ์ : Locking [packages] dependencies...
์์ํ ์ค๋จ
๋ด ํ๊ฒฝ:
@crifan ์ ๊ธ ์๋๋ฅผ ์ธ๊ธํ๋ ์ด๋ ค ์๊ฑฐ๋ ๋ซํ ์๋ ๋ชจ๋ ๋ฌธ์ ์ ๋์ผํ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ ํ์๊ฐ ์์ต๋๋ค. ๋น์ ์ด ๊ฐ์ ๋ง์ ๋ช ๋ฒ์ด๋ ์ฐ๋ฆฌ๋ ๋น์ ์ ์๊ฒฌ์ ๋ณผ ๊ฒ์ ๋๋ค. ๋์์ด ๋๊ณ ์ถ๋ค๋ฉด ์ฌํ ๊ฐ๋ฅํ ์ฌ๋ก๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. "๋๋"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๋จ์ํ ์ด์ ํธ๋์ปค์ ํธ๋ํฝ์ ์ถ๊ฐํ๋ ๊ฒ ์ธ์๋ ์๋ฌด ๊ฒ๋ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๊ทธ ์ ์ ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. Pipenv๋ ๋งค์ฐ ๋๋ฆฝ๋๋ค.
์ ๊ทธ๊ณ ์ค์นํ๋ ๋ฐ 1์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
์ด ๋ฌธ์ ๋ ์ฌ๊ธฐ์์ ์ ๋ต๋ณ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. https://github.com/pypa/pipenv/issues/1914#issuecomment -378846926
Python ์ข ์์ฑ์ ํด๊ฒฐ ๋ฐ ๊ณ์ฐ์ ์ํด ๊ฐ ํจํค์ง์ ์ค์ ํ์ผ์ ์์ ํ ๋ค์ด๋ก๋ํ๊ณ ์คํํด์ผ ํฉ๋๋ค. ๊ทธ๊ฒ ํ์ค์ด๊ณ ์กฐ๊ธ ๋๋ฆฝ๋๋ค. 2๋ถ์ ๊ธฐ๋ค๋ฆด ์ ์๊ฑฐ๋ ์ ์ถฉํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐ๋๋ฉด ์ธ์ ๋ ์ง
--skip-lock
์ ๋ฌํ ์ ์์ต๋๋ค.
์ง์ ๊ณ์ฐํ์ง ์๊ณ PyPI API์์ ํด์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๊น?
pipenv๋ ํ๋ฅญํ์ง๋ง ์ด ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ค ์ง์ ์ด ์์ผ๋ฉด ๊ธฐ๋ปํ ๊ฒ์ ๋๋ค. --skip-lock์ด ์๋ํ์ง ์์์ต๋๋ค.
pipenv๋ ํ๋ฅญํ์ง๋ง ์ด ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ค ์ง์ ์ด ์์ผ๋ฉด ๊ธฐ๋ปํ ๊ฒ์ ๋๋ค. --skip-lock์ด ์๋ํ์ง ์์์ต๋๋ค.
๋๋ฅผ ์ํด ์ผํ๋ค
Windows์์ Git Bash๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด Powershell์ ๋นํด ๋งค์ฐ ๋๋ฆฝ๋๋ค. ์ด์ ๋ํ ํต๊ณ๋ ๋ฐ์ดํฐ๊ฐ ์์ง๋ง PS๊ฐ ๋ ๋น ๋ฅธ ๊ฒ ๊ฐ์์ต๋๋ค. ๋ฐ๋ผ์ Git Bash๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ pipenv
'ing์ ๋ํด ๊ธฐ๋ณธ PS๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ํฌ๋๋ฅผ ์ค์นํ๋ ๋์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฝ๋๋ค. ์์ธํ ์ถ๋ ฅ์ ์ด์ชฝ
pipenv install pandas --verbose
Installing pandasโฆ
โ Installing...Installing 'pandas'
$ ['/Users/sinscary/.local/share/virtualenvs/signzy-MSzur11z/bin/pip', 'install', '--verbose', '--upgrade', 'pandas', '-i', 'https://pypi.org/simple']
Adding pandas to Pipfile's [packages]โฆ
โ Installation Succeeded
Pipfile.lock not found, creatingโฆ
Locking [dev-packages] dependenciesโฆ
Locking [packages] dependenciesโฆ
โ ฆ Locking...
30๋ถ ์ด์ ์ ๊ธ ์ํ์์ ๋ฉ์ถฅ๋๋ค. ์ ๋ ํ์ด์ฌ 3.7.0, macos mojave๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋์์ด ํ์ํฉ๋๋ค.
์ด ์ฃผ์ ์ ๋ํ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ ๊ธ ๋จ๊ณ ์ค๋จ์ผ๋ก ์ธํด pipenv๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
๋ค์ ๋์ปค ์ด๋ฏธ์ง๋ ๋ด ๋ฉํฑ(i7/16Gb)์์ ๋น๋ํ๋ ๋ฐ 30๋ถ ์ด์ ๊ฑธ๋ฆฌ๋ฉฐ pipenv install ...
๋ช
๋ น์ ์ค๋ ๋์ ์คํ๋ฉ๋๋ค...
Dockerfile
FROM python:3.7-alpine
# Update package list.
RUN set -ex && apk update
# Install apk dependencies.
RUN set -ex && apk add --no-cache musl-dev gcc libffi-dev openssl-dev make
# Install Pipenv.
RUN set -ex && pip install pipenv --upgrade
# Copy Pipfiles.
RUN mkdir /website
COPY Pipfile /website
# Install Pipenv dependencies.
WORKDIR /website
RUN set -ex && pipenv install --system --skip-lock --verbose
Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[requires]
python_version = "3.7"
[packages]
sanic = "*"
jinja2 = "*"
asyncpg = "*"
uvloop = "*"
munch = "*"
[dev-packages]
[pipenv]
allow_prereleases = true
์ด๊ฒ ์ ์์ธ๊ฐ์? ๋๊ตฐ๊ฐ ์ฌ์์ฐํ ์ ์์ต๋๊น?
Alpine Linux
๋๋ ๋ฌธ์ ๊ฐ pipenv
์ ์ชฝ์ ์์ง ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค ...
Alpine ๊ธฐ๋ฐ docker-image๋ฅผ Debian-Slim ์ ๊ตฌ์ถ๋ ๊ฒ์ผ๋ก ๊ต์ฒดํ์ผ๋ฉฐ ์ด์ pipenv install
๊ฐ ๋ช ์ด ์์ ์๋ฃ๋ฉ๋๋ค.
๋ด ์์ ๋ฌธ์ ๋ Alpine Linux๊ฐ ํญ์ ์์ค์์ cython-extension
๋๋ c-extensions
๋ฅผ ํฌํจํ๋ ํจํค์ง๋ฅผ ๋น๋ํ๋ ค๊ณ ์๋ํ๋๋ฐ, ์ด๋ Docker ์ปจํ
์ด๋์์ ์์ํ ๊ฑธ๋ฆด ์ ์๋ ๋ฐ๋ฉด Debian Linux๋ wheel
์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์นํ๋ค๋ ๊ฒ์
๋๋ค.
์ด์ ๋ํ ์ถ๊ฐ ์ ๋ณด: https://stackoverflow.com/questions/49037742/why-does-it-take-ages-to-install-pandas-on-alpine-linux
๋๋ ์ค๋ซ๋์ pipenv๋ฅผ ๋ ๋ฌ๊ณ "venv"๋๋ ๋ค๋ฅธ ์ต์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๊ฒฝ์ ๋ง๋ค์ด์ผ ํ ๋๋ง๋ค.
์ด์ํ ์๋ ๋ฌธ์ ๋ ์๊ณ ์ผ๋ถ ์คํฌ๋ฆฝํ ์ ๋ํด 2๊ฐ์ ๋ชจ๋๋ง ์ํํ๊ณ ์์ต๋๋ค.
click
์ค์นํ๋ ๋ฐ 15/20๋ถ์ด ๊ฑธ๋ ธ๊ณ 60Mbps ์ด์์ ๋ค์ด ์๋์ ์ต์ MacBook Pro 2019(๋ด๊ฐ ์ ํํ ํ๋์จ์ด๊ฐ ์๋)์์ ์คํ๋๋ ์ธํฐ๋ท ํ ์คํธ.
๋น๋ถ๊ฐ virtualenv๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋ ๋์ ์๋ฃจ์ ์ด ์ ๊ณต๋ ๋๊น์ง
๋ด๊ฐ ์ด ์์ ์ ์ํํ๋ ์๊ฐ์ 99%๋ ์ข ์์ฑ์ด ๋ด ์ ๊ธ ํ์ผ์ ๋์ผํ ๊ฒ์ผ๋ก ํด๊ฒฐ๋ฉ๋๋ค. ์ด๋ ๋ด ๊ฐ๋ฐ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ง์ง๋ง ์คํ ์ดํ์ ์๋ก์ด ์ ์คํธ๋ฆผ ํจํค์ง๊ฐ ์๋ ๊ฒฝ์ฐ ํ์คํ ํ๋ก์ธ์ค๋ฅผ ๊ฑด๋๋ธ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด ์ฃผ์ ์ ๋ํ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ ๊ธ ๋จ๊ณ ์ค๋จ์ผ๋ก ์ธํด pipenv๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.