Import Search

BnDCยท2021๋…„ 9์›” 7์ผ
0

python

๋ชฉ๋ก ๋ณด๊ธฐ
3/3
post-thumbnail

๐ŸŽ† Import Search

ํŒŒ์ด์ฌ์€ ์™ธ๋ถ€์— ์žˆ๋Š” package๋‚˜ module์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ import ํ•ด์™€์•ผ ํ•œ๋‹ค. ํŒŒ์ด์ฌ ํŒŒ์ผ์„ import ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ํŒŒ์ด์ฌ ํŒŒ์ผ์ด๋‚˜ package ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์–ด๋””์žˆ๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ํŒŒ์ด์ฌ์€ ๋ชจ๋“ˆ/package๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊นŒ?
1 ~ 3 ์ˆœ์œผ๋กœ ์ฐพ๋Š”๋‹ค.

  1. sys. modules
  2. built-in modules
  3. sys.path

๐ŸŽˆ sys.modules

์ด๋ฏธ imported๋œ ๋ชจ๋“ˆ๊ณผ packages์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” dictionary ์ด๋‹ค. imported๋œ ๋ชจ๋“ˆ๊ณผ package๋“ค์€ ํŒŒ์ด์ฌ์ด ๋˜ ๋‹ค์‹œ ์ฐพ์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ƒˆ๋กœ importํ•˜๋Š” ๋ชจ๋“ˆ์ด๋ผ๋ฉด, sys.modules์—์„œ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

๐ŸŽˆ built-in module

ํŒŒ์ด์ฌ์ด ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณ„๋„์˜ ์„ค์น˜ ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. import ํ•˜๊ณ ์ž ํ•˜๋Š” module์ด sys.modules์— ์—†์œผ๋ฉด ๋‘ ๋ฒˆ์งธ๋กœ buit-in module์—์„œ ์ฐพ๋Š”๋‹ค.

sys๋„ built-in module์ž„์œผ๋กœ ์ดˆ๊ธฐ์— import ๋  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŽˆ sys.path

import ํ•˜๊ณ ์ž ํ•˜๋Š” package ์ฃผ์†Œ๋ฅผ string ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์›์†Œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” list์ด๋‹ค. importํ•˜๊ณ ์ž ํ•˜๋Š” module์ด sys.modules์™€ built-in module์— ์—†๋‹ค๋ฉด, sys.path ์›์†Œ ์ค‘์— import ํ•˜๊ณ ์ž ํ•˜๋Š” package๊ฐ€ ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

['',
 '/Users/song-eun-u/anaconda3/bin',
 '/Users/song-eun-u/anaconda3/lib/python36.zip',
 '/Users/song-eun-u/anaconda3/lib/python3.6',
 '/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
 '/Users/song-eun-u/.ipython']
 

๐ŸŽ‡ Absolute path vs Relative path


๐Ÿ“Œ Absolute path

import ํ•˜๊ณ ์ž ํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„ ํ• ๋•Œ, ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ถ€ํ„ฐ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ์‹ import ํ•˜๋Š” ํŒŒ์ผ์˜ ์œ„์น˜์— ์ƒ๊ด€ ์—†์ด ํ•ญ์ƒ ๋™์ผํ•œ ๊ฒฝ๋กœ๋กœ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ Relative path

import ํ•˜๊ณ ์ž ํ•˜๋Š” module์˜ ์ฃผ์†Œ๋ฅผ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹

โ””โ”€โ”€ my_app
    โ”œโ”€โ”€ main.py
    โ”œโ”€โ”€ package1
    โ”‚   โ”œโ”€โ”€ module1.py
    โ”‚   โ””โ”€โ”€ module2.py
    โ””โ”€โ”€ package2
        โ”œโ”€โ”€ __init__.py
        โ”œโ”€โ”€ module3.py
        โ”œโ”€โ”€ module4.py
        โ””โ”€โ”€ subpackage1
            โ””โ”€โ”€ module5.py

๐ŸŽฏ absolute path๋ฅผ ์ด์šฉํ•ด module5๋ฅผ importํ•˜๊ธฐ

from package2.subpackage1 import module5

๐ŸŽฏ module3์—์„œ relative path๋ฅผ ์ด์šฉํ•ด module2๋ฅผ importํ•˜๊ธฐ

from ..package1 import module2

๐Ÿ” absolute path๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋””์—์„œ๋‚˜ importํ•ด๋„ ๊ฒฝ๋กœ์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•˜์ง€๋งŒ, ๊ฒฝ๋กœ๊ฐ€ ๊ธธ์–ด ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
๐Ÿ” relative path๋Š” ๊ฒฝ๋กœ์˜ ๊ธธ์ด๊ฐ€ absolute path์— ๋น„ํ•ด ์ ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ—ท๊ฐˆ๋ฆฌ๊ธฐ ์‰ฝ๋‹ค ๋˜ํ•œ ํŒŒ์ผ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ์ž‘์„ฑ๋œ ๊ฒฝ๋กœ๋„ ์ˆ˜์ •ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

โœจ calculator package

๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฒƒ๊ณผ ๋”ํ•œ ๊ฒƒ์„ ํ•ฉ์น˜๋Š” ๊ฐ„๋‹จํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

__init__.py์˜ ์—ญํ• ์€?
__init__.py๊ฐ€ ์†ํ•œ ๊ณณ์ด ํŒจํ‚ค์ง€ ๋””๋ ‰ํ† ๋ฆฌ์ž„์œผ๋กœ ์•Œ๋ ค ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. python 3.3 ๋ฒ„์ „๋ถ€ํ„ฐ __init__.py ํŒŒ์ผ์ด ์—†์–ด๋„ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜์ง€๋งŒ.
ํ•˜์œ„ ๋ฒ„์ „ ํ˜ธํ™˜์„ ์œ„ํ•ด ์ƒ์„ฑ ํ•˜๋„๋ก ํ•˜์ž

๐Ÿงจ main.py ์—์„œ relative path๋ฅผ ์ด์šฉํ•ด add_and_multiply๋ฅผ import ํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” error

๐Ÿงต ํŒŒ์ด์ฌ์ด module์˜ ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ, __name__ ์— ๋‹ด๊ธด ๊ฐ’์œผ๋กœ ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋ฐ, main์—์„œ๋Š” importํ•˜๋ฉด __name__์ด __main__์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ธฐ์ค€์„ ์žก์ง€ ๋ชปํ•˜๋ฏ€๋กœ error๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿ’ก main module์—์„œ import ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

main์˜ import๋ฅผ absolute path๋กœ ๋ณ€๊ฒฝํ•˜๋‹ˆ ์˜ค๋ฅ˜์—†์ด ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿงจ module ์ธ add_and_multiply.py์„ absolute path๋กœ import ํ–ˆ์„ ๋•Œ, ๋ฐœ์ƒํ•˜๋Š” error

mainํŒŒ์ผ์ด ์‹คํ–‰๋˜๊ณ  add_and_multiply.py๋Š” calculator package์˜ ํ•˜์œ„ module๋กœ ๋“ฑ๋ก ๋œ๋‹ค. ๋ฉ”์ธ ๋ชจ๋“ˆ์˜ ์ ˆ๋Œ€๊ฒฝ๋กœ๊ฐ€ ๋“ฑ๋ก๋˜๋ฉฐ, ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฟŒ๋ฆฌ๋กœ์„œ ์—ญํ• ์„ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ main์—์„œ๋Š” absolute paht๋ฅผ, ๊ทธ์™ธ์˜ ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ relative path ๋ฐฉ๋ฒ•์œผ๋กœ module์„ import ํ•ด์•ผ ํ•œ๋‹ค.

profile
โ€œLife is C (Choice) between B (Birth) and D (Death).โ€ - ์ธ์ƒ์€ B์™€ D์‚ฌ์ด์˜ C

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด