Pipenv: ๋งˆ์ง€๋ง‰ ๊ธฐ๋ณธ ์ข…์†์„ฑ์ด ๋กœ์ปฌ๋กœ ํ‘œ์‹œ๋˜๊ณ  ํŽธ์ง‘ ๊ฐ€๋Šฅํ•จ

์— ๋งŒ๋“  2020๋…„ 10์›” 01์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pipenv

์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„๋‹จ ๋ฌธ์„œ ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์žฌํ˜„ ๋‹จ๊ณ„์—์„œ ๋‚ด (๊ฒฐํ•จ์ด์žˆ์„ ์ˆ˜์žˆ๋Š”) ์›Œํฌ ํ”Œ๋กœ๋ฅผ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช‡ ์ฃผ ๋™์•ˆ ๋‚˜ ์ž์‹ ์„ ๋น„๋‚œํ•˜๋ฉฐ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ์–ด ์™”์œผ๋ฉฐ ์ด๊ฒƒ์ด ๋‚˜ ๋ฒŒ๋ ˆ๊ฐ€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฌธ์ œ ์„ค๋ช…

Pipfile.lock์˜ ๊ธฐ๋ณธ ์„น์…˜์— ๋‚˜์—ด๋œ ๋งˆ์ง€๋ง‰ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๊ฐ€ ๋กœ์ปฌ๋กœ ์ž˜๋ชป ํ‘œ์‹œ๋˜๊ณ  ํŽธ์ง‘ ๊ฐ€๋Šฅํ•จ

์˜ˆ์ƒ ๊ฒฐ๊ณผ

๋‚˜์—ด๋œ ๋งˆ์ง€๋ง‰ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋Š” ์—ฌ์ „ํžˆ pypi์—์„œ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๊ฒฐ๊ณผ

๋‚ด Pipfile.lock์€ ๋ช…๋ฐฑํ•œ ์ด์œ ๋กœ CI ๋ฐ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋ฅผ ์ค‘๋‹จ์‹œํ‚ค๋Š”์ด diff๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

             "version": "==1.25.10"
         },
         "wrapt": {
-            "hashes": [
-                "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
-            ],
-            "version": "==1.12.1"
+            "editable": true,
+            "path": "."
         }
     },
     "develop": {

๋ณต์ œ ๋‹จ๊ณ„

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
flake8 = "3.8.3"
pytest = "5.4.3"
pytest-cov = "2.10.0"
termcolor = "1.1.0"

[packages]
mycli = {editable = true, path = "."}

[requires]
python_version = "3.7"

(mycli์—๋Š” python ํด๋ฆญ์— ๋Œ€ํ•œ ์ง„์ž… ์  ์ƒ์„ฑ์„ ์šฉ์ดํ•˜๊ฒŒํ•˜๋Š” setup.py๊ฐ€ ์žˆ์œผ๋ฉฐ ๋น„ ๊ฐœ๋ฐœ ์ข…์†์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค)

์ด ํ”„๋กœ์ ํŠธ๋Š” CLI ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋ฉฐ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๊ณ  ๋‹ค์Œ์„ ํ†ตํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
PIPENV_IGNORE_VIRTUALENVS=1 PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy

์ƒˆ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋กœ์„œ setup.py ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
pipenv lock

์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ƒˆ ์ข…์†์„ฑ์ด ํฌํ•จ ๋œ Pipfile.lock ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์ง€๋งŒ ๋งˆ์ง€๋ง‰ ๊ธฐ๋ณธ ์ข…์†์„ฑ์˜ ํ˜•์‹์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค (ํ•ด๋‹น ์œ„์น˜, ํŠนํžˆ wrapt ์—์„œ ์•ŒํŒŒ๋ฒณ ๋ ๊ทผ์ฒ˜์—์žˆ๋Š” ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ zipp )

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ Pipfile.lock์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
rm -rf Pipfile.lock .venv
๊ณผ
pipenv lock


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

์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ ์ œ๊ฐ€ ๋ฉ์ฒญ ํ•ด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๊ฐ์‚ฌ!

Type Vendored Dependencies

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

@jmehnle ๋ฐ @patelamol์ด ์–ธ๊ธ‰

       "zipp": {
            "editable": true,
            "path": "."
        },

๋‚ด ํ•ด๊ฒฐ์ฑ…์€ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฑด๊ฐ•ํ•˜์ง€ ์•Š์€ pipfile ์ž ๊ธˆ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

"zipp": {
            "hashes": [
                "sha256:43f4fa8d8bb313e65d8323a3952ef8756bf40f9a5c3ea7334be23ee4ec8278b6",
                "sha256:b52f22895f4cfce194bc8172f3819ee8de7540aa6d873535a8668b730b8b411f"
            ],
            "version": "==3.2.0"
        }

์ด ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ ๊ณง ๋‚˜์˜ค๋Š” pipenv ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

@patelamol ๊ณผ ๋‚˜๋Š” ์ด๊ฒƒ์„ pipenv 2020.08.13์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2018.11.26 ๊นŒ์ง€ ๋ชจ๋“  ์ตœ์‹  ๋ฒ„์ „์—์„œ์ด ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2018.11.26 ์—๋Š”์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@jmehnle ๋ฐ @patelamol์ด ์–ธ๊ธ‰

       "zipp": {
            "editable": true,
            "path": "."
        },

๋‚ด ํ•ด๊ฒฐ์ฑ…์€ ์•ˆ์ „ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฑด๊ฐ•ํ•˜์ง€ ์•Š์€ pipfile ์ž ๊ธˆ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

"zipp": {
            "hashes": [
                "sha256:43f4fa8d8bb313e65d8323a3952ef8756bf40f9a5c3ea7334be23ee4ec8278b6",
                "sha256:b52f22895f4cfce194bc8172f3819ee8de7540aa6d873535a8668b730b8b411f"
            ],
            "version": "==3.2.0"
        }

์ด ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ํ•จ๊ป˜ ๊ณง ๋‚˜์˜ค๋Š” pipenv ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@gregflynn @patelamol ๊ทธ๋ ‡๋‹ค๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ์กด์žฌํ•ฉ๋‹ˆ๊นŒ? ์ฃผ์–ด์ง„ ๋‹จ๊ณ„๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@gregflynn @patelamol ๊ทธ๋ ‡๋‹ค๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์— ์กด์žฌํ•ฉ๋‹ˆ๊นŒ? ์ฃผ์–ด์ง„ ๋‹จ๊ณ„๋กœ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ! ์ด์ „์— github์—์„œ pipenv๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๊ณ  README์— ์ง€์นจ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์ž์‹ ๋ณต์ œ
  2. pyenv virtualenv 3.7.9 pipenv && pyenv local pipenv && pip install -e .
  3. ํ™•์ธ:
    ```
    $ pipenv-๋ฒ„์ „
    pipenv, ๋ฒ„์ „ 2020.8.13
$ ~/.pyenv/versions/pipenv/bin/pipenv --version 
pipenv, version 2020.8.13.dev0
```

  1. 2020.8.13์œผ๋กœ ์ƒˆ๋กœ์šด Venv๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‚ด setup.py์— stockquotes == 2.0.0 ์ถ”๊ฐ€
  3. ~/.pyenv/versions/pipenv/bin/pipenv lock
  4. ์ฃผ์‚ฌ์œ„ ์—†์Œ, ์˜ค๋ฅ˜ ํ™•์ธ
         "wrapt": {
-            "hashes": [
-                "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
-            ],
-            "version": "==1.12.1"
+            "editable": true,
+            "path": "."
         }
     },

@frostming ์ œ์•ˆ์„ ํ•˜๊ฑฐ๋‚˜์ด ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋ฟก๋ฟก

  1. 2020.8.13์œผ๋กœ ์ƒˆ๋กœ์šด Venv๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ? ๋งˆ์Šคํ„ฐ Pipenv๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฟก๋ฟก

  1. 2020.8.13์œผ๋กœ ์ƒˆ๋กœ์šด Venv๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ? ๋งˆ์Šคํ„ฐ Pipenv๋กœ ์ƒ์„ฑํ•˜๊ณ  ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋„์ปค ์ด๋ฏธ์ง€๊ฐ€ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ๋ˆˆ์ด์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜์—ฌ ์ตœ์‹  ๋งˆ์Šคํ„ฐ ๋ฒ„์ „์œผ๋กœ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 4 ๋‹จ๊ณ„์—์„œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

-PIPENV_IGNORE_VIRTUALENVS=1 PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy
+PIPENV_IGNORE_VIRTUALENVS=1 PIPENV_VENV_IN_PROJECT=1 $HOME/.pyenv/versions/pipenv/bin/pipenv install --deploy

๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ :

         "wrapt": {
-            "hashes": [
-                "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
-            ],
-            "version": "==1.12.1"
+            "editable": true,
+            "path": "."
         }
     },

๋” ๋งŽ์€ ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๊ฐ์‚ฌ

์˜ค, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ค‘์š”ํ•œ ์š”์†Œ๊ฐ€ VENV_IN_PROJECT ์ธ ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

์˜ค, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์žฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ค‘์š”ํ•œ ์š”์†Œ๊ฐ€ VENV_IN_PROJECT ์ธ ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

: raised_hands : ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค! Dockerfile ์ œ๊ณต์„ ์†Œํ™€ํžˆํ•ด์„œ ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ฝ์„ ๋•Œ ๊ทธ ๋ฉ”๋ชจ๋ฅผ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

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