๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Tip/Python

pigar vs pipreqs

 

๐Ÿ“Œ 1. pigar

์ž๋™ํ™”๋œ ๋ถ„์„๊ณผ ๊ด€๋ฆฌ์— ๊ฐ•์ ์ด ์žˆ๋Š” ๋„๊ตฌ

โœ… ํŠน์ง•

  • ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ import ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ข…์†์„ฑ์„ ์ž๋™ ์ถ”์ถœํ•˜์—ฌ requirements.txt๋ฅผ ์ƒ์„ฑ
  • PyPI๋ฅผ ํ†ตํ•ด ์ตœ์‹  ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ์ž๋™ ๊ฐ์ง€ํ•˜์—ฌ requirements.txt์— ์ถ”๊ฐ€
  • ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ํƒ์ƒ‰ํ•˜์—ฌ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์Œ
  • ์บ์‹œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์„œ ํ•œ ๋ฒˆ ์ฐพ์€ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ๋ถ„์„ํ•  ๋•Œ ์†๋„๊ฐ€ ๋น ๋ฆ„
  • ๋‹จ์ˆœ import ๊ธฐ๋ฐ˜ ๋ถ„์„์ด๋ผ์„œ ๋™์  import (์˜ˆ: importlib.import_module)๋Š” ์ถ”์  ๋ถˆ๊ฐ€

โœ… ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

pip install pigar
pigar generate
  • ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ ์ข…์†์„ฑ์„ ๋ถ„์„ํ•˜๊ณ  requirements.txt๋ฅผ ์ƒ์„ฑํ•จ.
  • ํŠน์ • ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ์ง€์ •ํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ:
    pigar generate -p /path/to/project
    

โœ… ์žฅ์ 

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

โŒ ๋‹จ์ 

  • ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ import ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„์„ํ•˜๋ฏ€๋กœ, setup.py๋‚˜ pyproject.toml ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์„ ํ™œ์šฉํ•˜์ง€ ์•Š์Œ
  • importlib๊ณผ ๊ฐ™์€ ๋™์  import๋Š” ๋ถ„์„ํ•˜์ง€ ๋ชปํ•จ
  • ๋ถ„์„ ์†๋„๊ฐ€ pipreqs๋ณด๋‹ค ๋А๋ฆด ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ 2. pipreqs

๊ฐ€๋ฒผ์šด ๋ถ„์„๊ณผ ๋น ๋ฅธ ์‹คํ–‰์ด ๊ฐ•์ ์ธ ๋„๊ตฌ

โœ… ํŠน์ง•

  • ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€ ์ด๋ฆ„๋งŒ ์ถ”์ถœํ•˜์—ฌ requirements.txt๋ฅผ ์ƒ์„ฑ (๋ฒ„์ „ ์ •๋ณด ์—†์Œ)
  • ๋น ๋ฅธ ์†๋„๋กœ ์ข…์†์„ฑ์„ ๋ถ„์„ํ•˜์—ฌ ๊ฐ€๋ฒผ์šด ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ
  • .py ํŒŒ์ผ์„ ์ง์ ‘ ๊ฒ€์‚ฌํ•˜์—ฌ import ๋ฌธ์—์„œ ์‚ฌ์šฉ๋œ ํŒจํ‚ค์ง€๋งŒ ๋ฆฌ์ŠคํŠธ์—…
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด --savepath ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
  • importlib ๊ฐ™์€ ๋™์  import๋Š” ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•จ

โœ… ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

pip install pipreqs
pipreqs /path/to/project --force
  • ์ง€์ •๋œ ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์ข…์†์„ฑ์„ ๋ถ„์„ํ•˜๊ณ  requirements.txt๋ฅผ ์ƒ์„ฑ
  • ๊ธฐ์กด requirements.txt๋ฅผ ๋ฎ์–ด์“ฐ๋ ค๋ฉด --force ์˜ต์…˜์„ ์‚ฌ์šฉ
  • ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ ค๋ฉด:
    pipreqs /path/to/project --force --savepath requirements.txt
    

โœ… ์žฅ์ 

  • ๋งค์šฐ ๋น ๋ฅธ ์‹คํ–‰ ์†๋„ (๊ฐ€๋ฒผ์šด ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ)
  • ํด๋”๋ฅผ ์ง€์ •ํ•ด์„œ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ๋ถ„์„ ๊ฐ€๋Šฅ
  • requirements.txt ํŒŒ์ผ์„ ๊ฐ„๋‹จํžˆ ์ƒ์„ฑํ•˜๋Š” ์šฉ๋„๋กœ ์ ์ ˆ

โŒ ๋‹จ์ 

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ
  • setup.py ๋“ฑ์˜ ์ถ”๊ฐ€ ์„ค์ • ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜์ง€ ์•Š์Œ
  • importlib ๊ฐ™์€ ๋™์  import๋Š” ๋ถ„์„ํ•˜์ง€ ๋ชปํ•จ
  • pigar๋ณด๋‹ค ์ข…์†์„ฑ ํƒ์ง€๊ฐ€ ๋‹จ์ˆœํ•˜์—ฌ ์ผ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ๋†“์น  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ

โœ… ๋น„๊ต ์š”์•ฝ

๊ธฐ๋Šฅ pigar pipreqs

ํŒจํ‚ค์ง€ ๋ถ„์„ ๋ฐฉ์‹ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ import ๋ถ„์„ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ import ๋ถ„์„
๋ฒ„์ „ ์ •๋ณด ํฌํ•จ ์—ฌ๋ถ€ โœ… ํฌํ•จ โŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ ์•ˆ ํ•จ (์˜ต์…˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
์†๋„ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆผ (์บ์‹œ ํ™œ์šฉ ๊ฐ€๋Šฅ) ๋งค์šฐ ๋น ๋ฆ„
์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ ์ž๋™ ํƒ์ƒ‰ โœ… ๊ฐ€๋Šฅ โœ… ๊ฐ€๋Šฅ
๋™์  import ๋ถ„์„ โŒ ๋ถˆ๊ฐ€๋Šฅ โŒ ๋ถˆ๊ฐ€๋Šฅ
์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ• pigar generate pipreqs /path/to/project --force
์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ตœ์‹  ๋ฒ„์ „ ์ž๋™ ํ™•์ธ ๊ฐ„๋‹จํ•œ requirements.txt ์ƒ์„ฑ

๐Ÿ† ์–ด๋–ค ๊ฒฝ์šฐ์— ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์จ์•ผ ํ• ๊นŒ?

  1. ํŒจํ‚ค์ง€ ๋ฒ„์ „๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ์ข…์†์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? → pigar
  2. ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ requirements.txt๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด? → pipreqs
  3. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ๊นŠ์ด ๋ถ„์„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด? → pigar
  4. ๋น ๋ฅด๊ฒŒ ์ข…์†์„ฑ ๋ชฉ๋ก๋งŒ ์ƒ์„ฑํ•˜๊ณ , ์ดํ›„ ๋ฒ„์ „์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? → pipreqs

๐ŸŽฏ ๊ฒฐ๋ก 

  • ๋น ๋ฅธ ์‹คํ–‰ ์†๋„๊ฐ€ ํ•„์š”ํ•˜๊ณ , ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ์—†์–ด๋„ ๋œ๋‹ค๋ฉด → pipreqs๊ฐ€ ์ ํ•ฉ
  • ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ด€๋ฆฌ๊นŒ์ง€ ์ž๋™ํ™”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด → pigar๊ฐ€ ์ ํ•ฉ

โšก ์ถ”์ฒœ: ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ์— ๊ฐ€๋ณ๊ฒŒ pipreqs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ requirements.txt๋ฅผ ๋งŒ๋“ค๊ณ , ๋‚˜์ค‘์— pigar๋กœ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.