Pipenv: ๊ตฌ๋ถ„ ๋œ ๋ถ„๊ธฐ๊ฐ€์žˆ๋Š” Git ์ข…์†์„ฑ์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ข…์†์„ฑ์œผ๋กœ ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.

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

์ด ๋ฌธ์ œ๋Š” # 1779์™€ ๋น„์Šทํ•˜์ง€๋งŒ ํ•ด๊ฒฐ์ฑ…์€ ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

PyInstaller ํŒจํ‚ค์ง€์˜ ํŠน์ • ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์•ผํ•˜์ง€๋งŒ PyInstaller ๋„ PyUpdater ์˜ ์ข…์†์„ฑ์ด๋ฉฐ ๋‚ด ํ”„๋กœ์ ํŠธ์—๋„ ํ•„์š”ํ•˜๋ฉฐ ๋‹ค๋ฅธ ํŠน์ • PyInstaller ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

$ python -m pipenv.help ์ถœ๋ ฅ :

python -m pipenv.help

C:\Program Files (x86)\Python36-32\python.exe: No module named pipenv.help

๋‚˜๋Š” ์ด๊ฒƒ์ด์ด ์ถœ๋ ฅ์ด ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ฌ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋„์›€์ด ํ•„์š”ํ•˜์‹ญ๋‹ˆ๊นŒ? ์ €๋Š” pipenv ๋ฒ„์ „ 11.0.2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


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

PyInstaller์˜ ์ตœ์‹  develop ๋ธŒ๋žœ์น˜๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผํ•˜๋ฉฐ PyUpdater๊ฐ€์ด๋ฅผ PyInstaller-3.3.1 ๋ฒ„์ „์œผ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. # 1779์—์„œ ์ œ์•ˆํ•œ๋Œ€๋กœ Pipfile์˜ [packages] ์—์„œ PyInstaller ์œ„์— PyUpdater๋ฅผ ๋ฐฐ์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ๊ฒฐ๊ณผ

Pipfile์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด :

PyUpdater = "*"
PyInstaller = {git = "https://github.com/pyinstaller/pyinstaller", ref = "develop"}

๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด :

PyInstaller = {git = "https://github.com/pyinstaller/pyinstaller", ref = "develop"}
PyUpdater = "*"

Pipfile.lock์˜ PyInstaller ๋ฒ„์ „์€ 3.3.1 ์ด๊ณ ์ด ๋ฒ„์ „์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กœ์šด ์ ์€ pipenv uninstall pyinstaller PyInstaller๋ฅผ ์ œ๊ฑฐํ•œ ๋‹ค์Œ pipenv install https://github.com/pyinstaller/pyinstaller/archive/develop.zip ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด Successfully installed PyInstaller-3.4.dev0+b31794cf1 ๋˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” 3.3.1 ๋ฒ„์ „์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹ .

๋ณต์ œ ๋‹จ๊ณ„
# Pipfile
[[source]]

url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]
PyUpdater = "*"
PyInstaller = {git = "https://github.com/pyinstaller/pyinstaller", ref = "develop"}

pipenv install
๋ฒ„์ „ ํ™•์ธ : pipenv run pyinstaller --version

๋˜๋Š”

์ƒˆ๋กœ์šด ๊นจ๋—ํ•œ ํ™˜๊ฒฝ ์กฐ์„ฑ
pipenv install pyupdater
pipenv uninstall pyinstaller
pipenv install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
๋ฒ„์ „ ํ™•์ธ : pipenv run pyinstaller --version

Dependency Resolution Type

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

ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š” : ์ฃผ๋ฌธ์€ ์ž  ๊ทธ๊ฑฐ๋‚˜ --sequential ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ์ค‘์š”ํ•˜๋ฉฐ zip ํŒŒ์ผ์€ ์ œ๋Œ€๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. -e ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋Š” ๋™์‹œ์— ์ด๋ฃจ์–ด ์ง€๋ฏ€๋กœ pipfile ์ˆœ์„œ๋Š” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ์ƒ์œ„ ์ข…์†์„ฑ์€ ํ•ญ์ƒ IMO์—์„œ ์Šน๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. PyInstaller๋Š” Pipfile (์ฆ‰, ์ตœ์ƒ์œ„ ์ˆ˜์ค€)์— ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฒ„์ „ ์ •๋ณด๋Š” PyUpdater์˜ ์ข…์†์„ฑ ์‚ฌ์–‘์— ์˜ํ•ด ์žฌ์ •์˜๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์ ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ž๋™์œผ๋กœ ๋ฌด์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์  ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ์—์„œ ๋ฌด์—‡์„ํ•ฉ๋‹ˆ๊นŒ

PyUpdater์—์„œ ์š”๊ตฌํ•˜๋Š”๋Œ€๋กœ PyInstaller๋ฅผ PyPI์˜ ๋ฒ„์ „์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ ์–ป์€ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
    "_meta": {
        "hash": {
            "sha256": "c0d9cbadaa9e85bb1b87408b1e0b428414754623d472d64deb2a5bd69ff9bf2c"
        },
        "pipfile-spec": 6,
        "requires": {},
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "altgraph": {
            "hashes": [
                "sha256:49dc134049903cc73fb76ca3cc9bef5b2b8c01c28732dd29594f99af2b449fc5",
                "sha256:fc28b986a68fde8d3ff0e6d6ba3fbdd2cd562d11d45ef7c7735fbd826c9eec2e"
            ],
            "version": "==0.15"
        },
        "appdirs": {
            "hashes": [
                "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
                "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
            ],
            "version": "==1.4.3"
        },
        "bsdiff4": {
            "hashes": [
                "sha256:5a022ff4c1d1de87232b1c70bde50afbb98212fd246be4a867d8737173cf1f8f"
            ],
            "version": "==1.1.4"
        },
        "certifi": {
            "hashes": [
                "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7",
                "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0"
            ],
            "version": "==2018.4.16"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "version": "==3.0.4"
        },
        "dsdev-utils": {
            "hashes": [
                "sha256:cbe18eb0104b56e19087d60b765d7875b114acce01b1aceca9120f0556ab109d"
            ],
            "version": "==0.9.6"
        },
        "ed25519": {
            "hashes": [
                "sha256:2991b94e1883d1313c956a1e3ced27b8a2fdae23ac40c0d9d0b103d5a70d1d2a"
            ],
            "version": "==1.4"
        },
        "future": {
            "hashes": [
                "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
            ],
            "version": "==0.16.0"
        },
        "macholib": {
            "hashes": [
                "sha256:7f76a7ef4f58f85889dec25fb532bad5acfd461c444738dfeb2e7bf855d5906b",
                "sha256:9aeec52d7da59912b15445d08b08d95cee48414f01dd035be06f04a825973c08"
            ],
            "version": "==1.9"
        },
        "pbr": {
            "hashes": [
                "sha256:3747c6f017f2dc099986c325239661948f9f5176f6880d9fdef164cb664cd665",
                "sha256:a9c27eb8f0e24e786e544b2dbaedb729c9d8546342b5a6818d8eda098ad4340d"
            ],
            "version": "==4.0.4"
        },
        "pefile": {
            "hashes": [
                "sha256:675c35ee0e1677db9e80d2f48d8a7ff2cf38e6207e8cd5e2a2c6d126db025854"
            ],
            "version": "==2017.11.5"
        },
        "pyinstaller": {
            "hashes": [
                "sha256:715f81f24b1ef0e5fe3b3c71e7540551838e46e9de30882aa7c0a521147fd1ce"
            ],
            "version": "==3.3.1"
        },
        "pypiwin32": {
            "hashes": [
                "sha256:67adf399debc1d5d14dffc1ab5acacb800da569754fafdc576b2a039485aa775",
                "sha256:71be40c1fbd28594214ecaecb58e7aa8b708eabfa0125c8a109ebd51edbd776a"
            ],
            "version": "==223"
        },
        "pyupdater": {
            "hashes": [
                "sha256:61e796063131bcde4e2467580c0add3a2e77cd0b0533a1b559f066e4c127570e"
            ],
            "index": "pypi",
            "version": "==2.5.3"
        },
        "pywin32": {
            "hashes": [
                "sha256:0df9b008caef10af0d674c483316c28dcf78391332d9d5d380fab667ebf2d7d1",
                "sha256:249391eb924b8376826e6f84d143d1dcc0e400b238b511d5fbd3811f6ed9ad50",
                "sha256:42f48567e36b787901ff3da20de5a134cd9880cc90832e2aad60951f058699f0",
                "sha256:9eff897796c9d76a213134257a01b6f8a122c55e0772847fba313a8091f3ec44",
                "sha256:c7ea0deabcc324e5b74084b5452003109c592d1aedbe9e9289ed55b26d9b0c7f",
                "sha256:da422d4067d98b49fbb19d851900a5fc38c61eab0ee803574c27c42309173ebe",
                "sha256:f0f0e7c82ee334dd6e888b9b5beb05fd8947355fa7a15644c810bb4ea0079ca6",
                "sha256:fb3c85907918fd01a72ee146d323d220771dee151c0cfa5630c2f35797ffb116"
            ],
            "version": "==223"
        },
        "six": {
            "hashes": [
                "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
                "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
            ],
            "version": "==1.11.0"
        },
        "stevedore": {
            "hashes": [
                "sha256:e3d96b2c4e882ec0c1ff95eaebf7b575a779fd0ccb4c741b9832bed410d58b3d",
                "sha256:f1c7518e7b160336040fee272174f1f7b29a46febb3632502a8f2055f973d60b"
            ],
            "version": "==1.28.0"
        },
        "urllib3": {
            "hashes": [
                "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
                "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
            ],
            "version": "==1.22"
        }
    },
    "develop": {}
}

@uranusjr ์—…๋ฐ์ดํŠธ ๋œ requirementslib๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„๊ธฐ์— ๋Œ€ํ•ด ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค.

bugfix / 2260๊ณผ ๋™์ผ : / ( pipenv lock --clear )

๋‚˜๋Š” ์ด๊ฒƒ์ด ํŽธ์ง‘ ๊ฐ€๋Šฅ ๋ชจ๋“œ๋กœ ์„ค์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ์ฐจ๋ฆด๋ฟ์ž…๋‹ˆ๋‹ค. ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŽธ์ง‘ ๊ฐ€๋Šฅ ๋ชจ๋“œ๊ฐ€ ์•„๋‹Œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ๋Š” ์ข…์†์„ฑ ํ•ด๊ฒฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„, ์™œ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ ๊ฒƒ ๊ฐ™์•„์š”!

์•ˆ๋…•ํ•˜์„ธ์š”. ๋‚˜๋Š” ์–ด์ œ ๋Š์Šจํ•˜๊ฒŒ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋ฒ„๊ทธ๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

Pipfile ํŒจํ‚ค์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[packages]
foo = "*"
bar = {git = "https://github.com/bar/bar", ref = "bar"}

์ฒ˜์Œ์—๋Š” github์—์„œ ์˜ค๋Š” bar ํŒจํ‚ค์ง€๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. pipenv update bar ์‹คํ–‰ ํ•œ ํ›„ foo ๋ฅผ ์ข…์†์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์ž ๊ธ€ ๋•Œ foo ๊ฐ€ PyPI ๋ฒ„์ „์œผ๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

editable= True ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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