ERROR: file or directory not found
pytest ์ import package์ path๊ฐ sys.path์ ๋ฑ๋ก๋์ง ์์ module์ ๋ถ๋ฌ์ฌ ์ ์๋ ์ํ์ด๋ค.
1) python์ด ์คํ๊ณผ ๋์์ env ์ค์ / mac (/.zshrc), Windows(/.bashrc)
# ๊ฒฝ๋ก ๋ฑ๋ก
export PYTHONPATH="/Users/code/~"
# ๋ค์์ ๊ฒฝ๋ก ๋ฑ๋ก
export PYTHONPATH="/Users/code/~:/Users/workspace/~"
2) python ํ๊ฒฝ ๋ณ์
PYTHONHOME
ํ์ค Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์น๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ prefix/lib/pythonversion
๋ฐ exec_prefix/lib/pythonversion
์์ ๊ฒ์๋ฉ๋๋ค. ์ฌ๊ธฐ์ prefix
์ exec_prefix
๋ ์ค์น์ ๋ฐ๋ผ ๋ค๋ฅธ ๋๋ ํ ๋ฆฌ์
๋๋ค. ๋ ๋ค /usr/local
๋ก ๊ธฐ๋ณธ ์ค์ ๋ฉ๋๋ค. PYTHONHOME
์ด ๋จ์ผ ๋๋ ํ ๋ฆฌ๋ก ์ค์ ๋๋ฉด ๊ทธ ๊ฐ์ด prefix
์ exec_prefix
๋ฅผ ๋ชจ๋ ๋์ฒดํฉ๋๋ค. ์ด๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ง์ ํ๋ ค๋ฉด PYTHONHOME
์ prefix:exec_prefix
๋ก ์ค์ ํ์ญ์์ค.
PYTHONPATH
PYTHONPATH
์ ๋ชจ๋ ํ์ผ์ ๊ธฐ๋ณธ ๊ฒ์ ๊ฒฝ๋ก๋ฅผ ํ์ฅํ๋ ํ๊ฒฝ ๋ณ์์
๋๋ค. ์ด ๋ณ์๋ ์
ธ์ PATH
์ ๋์ผํ ํ์์ผ๋ก ์ง์ ๋ฉ๋๋ค. ์ฆ, ํ๋ ์ด์์ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ os.pathsep (์: Unix์ ๊ฒฝ์ฐ ์ฝ๋ก , Windows์ ๊ฒฝ์ฐ ์ธ๋ฏธ์ฝ๋ก )๋ก ๊ตฌ๋ถํ์ฌ ์ง์ ํฉ๋๋ค. ์กด์ฌํ์ง ์๋ ๋๋ ํ ๋ฆฌ๋ ๋ฌด์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋๋ ํ ๋ฆฌ ์ธ์๋, ๊ฐ๋ณ PYTHONPATH
ํญ๋ชฉ์ ์์ค ๋๋ ์ปดํ์ผ๋ ํํ์ ์์ํ Python ๋ชจ๋์ ํฌํจํ๋ zip ํ์ผ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฅ ๋ชจ๋์ zip ํ์ผ์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ฒ์ ๊ฒฝ๋ก๋ ์ค์น์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก prefix/lib/pythonversion
์ผ๋ก ์์ํฉ๋๋ค (PYTHONHOME
์ฐธ์กฐ). ํญ์ PYTHONPATH
์ ์ถ๊ฐ๋ฉ๋๋ค. ์ธํฐํ์ด์ค ์ต์
์์ ์ค๋ช
ํ ๋๋ก PYTHONPATH
์์ ๊ฒ์ ๊ฒฝ๋ก์ ์ถ๊ฐ ๋๋ ํ ๋ฆฌ๊ฐ ์ฝ์
๋ฉ๋๋ค. ๊ฒ์ ๊ฒฝ๋ก๋ Python ํ๋ก๊ทธ๋จ ๋ด๋ถ์์ sys.path
๋ณ์๋ฅผ ํตํด ์กฐ์ํ ์ ์์ต๋๋ค.
PYTHONSAFEPATH
PYTHONSAFEPATH
๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ์ ์ฌ์ ์ผ๋ก ์์ ํ์ง ์์ ๊ฒฝ๋ก๊ฐ sys.path
์ ์ถ๊ฐ๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ -P
์ต์
์ ์ฐธ์กฐํ์ญ์์ค.
๋ฒ์ 3.11์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONPLATLIBDIR
PYTHONPLATLIBDIR
๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, sys.platlibdir
๊ฐ์ ์ฌ์ ์ํฉ๋๋ค.
๋ฒ์ 3.9์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONSTARTUP
์ด ๋ณ์๊ฐ ์ฝ๊ธฐ ๊ฐ๋ฅํ ํ์ผ์ ์ด๋ฆ์ธ ๊ฒฝ์ฐ, ํด๋น ํ์ผ์ ์๋ Python ๋ช
๋ น์ด ๋ํ์ ๋ชจ๋์์ ์ฒซ ๋ฒ์งธ ํ๋กฌํํธ๊ฐ ํ์๋๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค. ํ์ผ์ ๋ํ์ ๋ช
๋ น์ด ์คํ๋๋ ๋์ผํ ๋ค์์คํ์ด์ค์์ ์คํ๋๋ฏ๋ก ํด๋น ํ์ผ์์ ์ ์๋๊ฑฐ๋ ๊ฐ์ ธ์จ ๊ฐ์ฒด๋ฅผ ๋ํ์ ์ธ์
์์ ๋ณ๊ฒฝ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ ์ด ํ์ผ์์ sys.ps1๊ณผ sys.ps2 ํ๋กฌํํธ ๋ฐ sys.interactivehook ํํฌ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค. ์์ ์ filename
์ ์ธ์๋ก ์ฌ์ฉํ์ฌ ๊ฐ์ฌ ์ด๋ฒคํธ cpython.run_startup
๋ฅผ ๋ฐ์์ํต๋๋ค.
PYTHONOPTIMIZE
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -O
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์ ์๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -O
๋ฅผ ์ฌ๋ฌ ๋ฒ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
PYTHONBREAKPOINT
์ด ๋ณ์๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ, ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํธ์ถ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. ํธ์ถ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ๋ชจ๋์ ๊ฐ์ ธ์จ ๋ค์, sys.breakpointhook()
์ ๊ธฐ๋ณธ ๊ตฌํ์์ ์คํ๋ฉ๋๋ค. ์ด ๊ธฐ๋ณธ ๊ตฌํ์ built-in breakpoint()
์ ์ํด ํธ์ถ๋ฉ๋๋ค. ์ค์ ๋์ง ์์๊ฑฐ๋ ๋น ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ๊ฐ "pdb.set_trace"์ ๋์ผํฉ๋๋ค. ์ด ๋ณ์๋ฅผ ๋ฌธ์์ด "0"์ผ๋ก ์ค์ ํ๋ฉด sys.breakpointhook()
์ ๊ธฐ๋ณธ ๊ตฌํ์ด ์๋ฌด ์์
๋ ํ์ง ์๊ณ ์ฆ์ ๋ฐํํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
๋ฒ์ 3.7์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONDEBUG
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -d
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์ ์๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -d
๋ฅผ ์ฌ๋ฌ ๋ฒ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์ด ํ๊ฒฝ ๋ณ์๋ ๋๋ฒ๊ทธ ๋น๋์ Python์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌด์๋ฉ๋๋ค.
PYTHONINSPECT
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -i
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์ด ๋ณ์๋ os.environ
์ ์ฌ์ฉํ์ฌ Python ์ฝ๋์์๋ ์์ ํ ์ ์์ผ๋ฉฐ, ํ๋ก๊ทธ๋จ ์ข
๋ฃ์ ๊ฒ์ฌ ๋ชจ๋๋ฅผ ๊ฐ์ ๋ก ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PYTHONUNBUFFERED
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -u
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
PYTHONVERBOSE
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -v
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. ์ ์๋ก ์ค์ ๋ ๊ฒฝ์ฐ, -v
๋ฅผ ์ฌ๋ฌ ๋ฒ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
PYTHONCASEOK
์ด ๋ณ์๊ฐ ์ค์ ๋๋ฉด, Python์ import ๋ฌธ์์ ๋์๋ฌธ์๋ฅผ ๋ฌด์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ Windows์ macOS์์๋ง ์๋ํฉ๋๋ค.
PYTHONDONTWRITEBYTECODE
์ด ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ์์ค ๋ชจ๋์ ๊ฐ์ ธ์ค๊ธฐ ์ .pyc ํ์ผ์ ์์ฑํ์ง ์์ต๋๋ค. ์ด๋ -B
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
PYTHONPYCACHEPREFIX
์ด ๋ณ์๊ฐ ์ค์ ๋ ๊ฒฝ์ฐ, Python์ ์์ค ํธ๋ฆฌ ๋ด์ pycache ๋๋ ํ ๋ฆฌ๊ฐ ์๋ ํด๋น ๊ฒฝ๋ก์ ๋ฏธ๋ฌ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ์ .pyc ํ์ผ์ ์์ฑํฉ๋๋ค. ์ด๋ -X pycache_prefix=PATH
์ต์
์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
๋ฒ์ 3.8์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONHASHSEED
์ด ๋ณ์๊ฐ ์ค์ ๋์ง ์์๊ฑฐ๋ random์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ, str ๋ฐ bytes ๊ฐ์ฒด์ ํด์์ ๋ฌด์์ ๊ฐ์ ์๋๋ก ์ฌ์ฉํฉ๋๋ค. PYTHONHASHSEED๊ฐ ์ ์ ๊ฐ์ผ๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ํด์ ๋ฌด์์ํ ๋์์ธ ์ ํ์ hash()๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ณ ์ ์๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋ณ์์ ๋ชฉ์ ์ ํด์๋ฅผ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ธํฐํ๋ฆฌํฐ ์์ฒด์ ์์ฒด ํ ์คํธ ๋๋ ํ์ด์ฌ ํ๋ก์ธ์ค ํด๋ฌ์คํฐ์์ ํด์ ๊ฐ์ ๊ณต์ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ ์๋ [0, 4294967295] ๋ฒ์์ 10์ง์ ์ซ์์ฌ์ผ ํฉ๋๋ค. ๊ฐ 0์ ์ง์ ํ๋ฉด ํด์ ๋ฌด์์ํ๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค.
๋ฒ์ 3.2.3์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONINTMAXSTRDIGITS
์ด ๋ณ์๊ฐ ์ ์๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ํด์๊ธฐ์ ์ ์ญ ์ ์ ๋ฌธ์์ด ๋ณํ ๊ธธ์ด ์ ํ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฒ์ 3.11์์ ์ถ๊ฐ๋์์ต๋๋ค.
PYTHONIOENCODING
์ด ๋ณ์๊ฐ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์คํํ๊ธฐ ์ ์ ์ค์ ๋ ๊ฒฝ์ฐ, stdin/stdout/stderr์ ์ฌ์ฉ๋๋ ์ธ์ฝ๋ฉ์ ์ง์ ํฉ๋๋ค. ๊ตฌ๋ฌธ์ encodingname:errorhandler ํ์์ ๋๋ค. encodingname ๋ฐ :errorhandler ๋ถ๋ถ์ ์ ํ์ ์ด๋ฉฐ, str.encode()์์์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. stderr์ ๊ฒฝ์ฐ :errorhandler ๋ถ๋ถ์ ๋ฌด์๋ฉ๋๋ค. ํธ๋ค๋ฌ๋ ํญ์ 'backslashreplace'๊ฐ ๋ฉ๋๋ค.
๋ฒ์ 3.4์์ ๋ณ๊ฒฝ๋์์ต๋๋ค. encodingname ๋ถ๋ถ์ด ์ด์ ์ ํ์ ์ ๋๋ค.## Python ํ๊ฒฝ ๋ณ์
PYTHONNOUSERSITE
- ์ด ๊ฐ์ด ์ค์ ๋์ด ์์ผ๋ฉด, Python์ ์ฌ์ฉ์ site-packages ๋๋ ํ ๋ฆฌ๋ฅผ sys.path์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
PYTHONUSERBASE
- ์ฌ์ฉ์ base ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ํ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ site-packages ๋๋ ํ ๋ฆฌ์ ๊ฒฝ๋ก์ python -m pip install --user์ ์ค์น ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํฉ๋๋ค.
PYTHONEXECUTABLE
- ์ด ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋์ด ์์ผ๋ฉด, sys.argv[0]์ C ๋ฐํ์์ ํตํด ์ป์ ๊ฐ ๋์ ์ด ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. macOS์์๋ง ์๋ํฉ๋๋ค.
PYTHONWARNINGS
- ์ด๋ -W ์ต์ ๊ณผ ๋๋ฑํฉ๋๋ค. ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด๋ก ์ค์ ๋๋ฉด, -W๋ฅผ ์ฌ๋ฌ ๋ฒ ์ง์ ํ ๊ฒ๊ณผ ๋์ผํ๋ฉฐ, ๋ชฉ๋ก์์ ๋์ค์ ๋์ค๋ ํํฐ๊ฐ ๋จผ์ ๋์ค๋ ๊ฒ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
- ๊ฐ์ฅ ๊ฐ๋จํ ์ค์ ์ ํน์ ๋์์ ํ๋ก์ธ์ค์์ ๋ฐ์ํ๋ ๋ชจ๋ ๊ฒฝ๊ณ ์ ์กฐ๊ฑด์ ์ง์ ํ์ง ์๊ณ ์ ์ฉํฉ๋๋ค:
- PYTHONWARNINGS=default: ํธ์ถ ์์น ๋น ํ ๋ฒ ๊ฒฝ๊ณ
- PYTHONWARNINGS=error: ์์ธ๋ก ๋ณํ
- PYTHONWARNINGS=always: ํญ์ ๊ฒฝ๊ณ
- PYTHONWARNINGS=module: ํธ์ถํ๋ ๋ชจ๋ ๋น ํ ๋ฒ ๊ฒฝ๊ณ
- PYTHONWARNINGS=once: Python ํ๋ก์ธ์ค ๋น ํ ๋ฒ ๊ฒฝ๊ณ
- PYTHONWARNINGS=ignore: ๊ฒฝ๊ณ ํ์ง ์์
PYTHONFAULTHANDLER
- ์ด ํ๊ฒฝ ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋์ด ์์ผ๋ฉด, ์์์ faulthandler.enable()์ด ํธ์ถ๋ฉ๋๋ค. ์ด๋ SIGSEGV, SIGFPE, SIGABRT, SIGBUS ๋ฐ SIGILL ์ ํธ์ ๋ํ Python ์ถ์ ์ ๋ณด๋ฅผ ๋คํํ๊ธฐ ์ํ ํธ๋ค๋ฌ๋ฅผ ์ค์นํฉ๋๋ค.
PYTHONTRACEMALLOC
- ์ด ํ๊ฒฝ ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋์ด ์์ผ๋ฉด, tracemalloc ๋ชจ๋์ ์ฌ์ฉํ์ฌ Python ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ถ์ ํฉ๋๋ค. ๋ณ์์ ๊ฐ์ ์ถ์ ์ traceback์ ์ ์ฅ๋ ํ๋ ์์ ์ต๋ ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, PYTHONTRACEMALLOC=1์ ๊ฐ์ฅ ์ต๊ทผ์ ํ๋ ์๋ง ์ ์ฅํฉ๋๋ค.
PYTHONPROFILEIMPORTTIME
- ์ด ํ๊ฒฝ ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋์ด ์์ผ๋ฉด, Python์ ๊ฐ import์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํ์ํฉ๋๋ค.
PYTHONASYNCIODEBUG
- ์ด ํ๊ฒฝ ๋ณ์๊ฐ ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋์ด ์์ผ๋ฉด, asyncio ๋ชจ๋์ ๋๋ฒ๊ทธ ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค.
PYTHONMALLOC
- Python ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ/๋๋ ๋๋ฒ๊ทธ ํ
์ ์ค์ ํฉ๋๋ค. Python์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํจ๋ฐ๋ฆฌ๋ฅผ ์ค์ ํฉ๋๋ค.
- default: ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉ
- malloc: ๋ชจ๋ ๋๋ฉ์ธ(PYMEM_DOMAIN_RAW, PYMEM_DOMAIN_MEM, PYMEM_DOMAIN_OBJ)์ ๋ํด C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ malloc() ํจ์ ์ฌ์ฉ
- pymalloc: PYMEM_DOMAIN_MEM ๋ฐ PYMEM_DOMAIN_OBJ ๋๋ฉ์ธ์ ๋ํด pymalloc ํ ๋น์ ์ฌ์ฉ, PYMEM_DOMAIN_RAW ๋๋ฉ์ธ์ ๋ํด malloc() ํจ์ ์ฌ์ฉ
- ๋๋ฒ๊ทธ ํ
์ค์น:
- debug: ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์์ ๋๋ฒ๊ทธ ํ ์ค์น
- malloc_debug: malloc๊ณผ ๋์ผํ์ง๋ง ๋๋ฒ๊ทธ ํ ๋ ์ค์น
- pymalloc_debug: pymalloc๊ณผ ๋์ผํ์ง๋ง ๋๋ฒ๊ทธ ํ ๋ ์ค์น
PYTHONMALLOCSTATS
- ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋๋ฉด, Python์ ์๋ก์ด pymalloc ๊ฐ์ฒด ์์ญ์ด ์์ฑ๋ ๋๋ง๋ค pymalloc ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ธฐ์ ํต๊ณ๋ฅผ ์ธ์ํ๊ณ ์ข ๋ฃ ์ ์ธ์ํฉ๋๋ค. ์ด ๋ณ์๋ PYTHONMALLOC ํ๊ฒฝ ๋ณ์๊ฐ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ malloc() ํ ๋น๊ธฐ๋ฅผ ๊ฐ์ ๋ก ์ฌ์ฉํ๊ฑฐ๋ pymalloc ์ง์ ์์ด Python์ด ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ๋ฌด์๋ฉ๋๋ค.
PYTHONLEGACYWINDOWSFSENCODING
- ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋๋ฉด, ๊ธฐ๋ณธ ํ์ผ ์์คํ ์ธ์ฝ๋ฉ๊ณผ ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ ๋ชจ๋๊ฐ 'mbcs' ๋ฐ 'replace'๋ก ์ด์ ๋ฒ์ ์ธ 3.6 ์ด์ ์ ๊ฐ์ผ๋ก ๋ณต์๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ก์ด ๊ธฐ๋ณธ๊ฐ์ธ 'utf-8'๊ณผ 'surrogatepass'๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
PYTHONLEGACYWINDOWSSTDIO
- ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋๋ฉด, ์๋ก์ด ์ฝ์ ๋ฆฌ๋์ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ด๋ Unicode ๋ฌธ์๋ฅผ utf-8 ๋์ ํ์ฑ ์ฝ์ ์ฝ๋ ํ์ด์ง์ ๋ฐ๋ผ ์ธ์ฝ๋ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์ค ์คํธ๋ฆผ์ด ์ฝ์ ๋ฒํผ๊ฐ ์๋ ํ์ผ์ด๋ ํ์ดํ๋ก ๋ฆฌ๋๋ ์ ๋ ๊ฒฝ์ฐ ์ด ๋ณ์๋ ๋ฌด์๋ฉ๋๋ค.
PYTHONCOERCECLOCALE
- ๋น์ด ์์ง ์์ ๋ฌธ์์ด๋ก ์ค์ ๋๋ฉด, Python์ C ์ธ์ด ํ๊ฒฝ๋ณ์ LC_CTYPE์ ์ฟผ๋ฆฌํ๊ณ , ๊ทธ ๊ฐ์ด "UTF-8" ๋๋ "UTF8"๋ก ์์ํ์ง ์์ผ๋ฉด, LC_CTYPE๊ฐ "C"๋ก ์ค์ ๋์๊ฑฐ๋ ์ค์ ๋์ง ์์ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์ด ๊ฒฝ์ฐ, Python์ ํ๊ฒฝ๋ณ์ LC_CTYPE์ "C.UTF-8"๋ก ์ค์ ํฉ๋๋ค.### ํ๊ฒฝ ๋ณ์
ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Python ์ธํฐํ๋ฆฌํฐ์ ๋์์ ์ ์ดํ ์ ์์ต๋๋ค.
PYTHONCOERCECLOCALE
- ๊ฐ์ด 0์ผ๋ก ์ค์ ๋๋ฉด, Python CLI ์์ฉ ํ๋ก๊ทธ๋จ์ ASCII ๊ธฐ๋ฐ C ๋ฐ POSIX ๋ก์ผ์ผ์ ๋ ๋ฅ๋ ฅ์๋ UTF-8 ๊ธฐ๋ฐ ๋์ฒด๋ก ๋ณํํ์ง ์๋๋ก ํฉ๋๋ค.
- ์ด ๋ณ์๊ฐ ์ค์ ๋์ง ์์๊ฑฐ๋ 0์ด ์๋ ๊ฐ์ผ๋ก ์ค์ ๋์ง ์์์ผ๋ฉฐ, LC_CTYPE ๋ฒ์ฃผ์ ๋ํ ํ์ฌ ๋ก์บ์ด ๊ธฐ๋ณธ C ๋ก์บ์ด๊ฑฐ๋ ๋ช
์ ์ ์ผ๋ก ASCII ๊ธฐ๋ฐ POSIX ๋ก์บ์ด ์๋ ๊ฒฝ์ฐ, Python CLI๋ ์ธํฐํ๋ฆฌํฐ ๋ฐํ์์ ๋ก๋ํ๊ธฐ ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ก์บ์ LC_CTYPE ๋ฒ์ฃผ์ ๋ํด ์ค์ ํ๋ ค๊ณ ์๋ํฉ๋๋ค.
- C.UTF-8
- C.utf8
- UTF-8
- ์ด๋ฌํ ๋ก์บ ๋ฒ์ฃผ ์ค ํ๋๋ฅผ ์ค์ ํ๋ฉด, ํ์ฌ ํ๋ก์ธ์ค ํ๊ฒฝ์์๋ LC_CTYPE ํ๊ฒฝ ๋ณ์๊ฐ ํด๋น ๊ฐ์ผ๋ก ์ค์ ๋ฉ๋๋ค. ์ด๋ ์ธํฐํ๋ฆฌํฐ ์์ฒด๋ฟ๋ง ์๋๋ผ GNU readline ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋์ผํ ํ๋ก์ธ์ค์์ ์คํ๋๋ ๋ค๋ฅธ ๋ก์บ ์ธ์ ๊ตฌ์ฑ ์์ ๋ฐ Python์ locale.getdefaultlocale()๊ณผ ๊ฐ์ ํ๊ฒฝ์ ์ฟผ๋ฆฌํ๋ ์์ ์์๋ ๋ณผ ์ ์์ต๋๋ค.
- ์ด๋ฌํ ๋ก์บ (๋ช ์ ์ ์ผ๋ก ๋๋ ์์ ์์ ์ ๋ก์บ ๊ฐ์ ๋ณํ์ ํตํด)์ ๊ตฌ์ฑํ๋ ๊ฒ์ sys.stdin๊ณผ sys.stdout์ surrogateescape ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์๋์ผ๋ก ํ์ฑํํฉ๋๋ค (sys.stderr๋ ๋ค๋ฅธ ๋ก์บ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก backslashreplace๋ฅผ ์ฌ์ฉํฉ๋๋ค). ์ด ์คํธ๋ฆผ ์ฒ๋ฆฌ ๋์์ PYTHONIOENCODING์ ์ฌ์ฉํ์ฌ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
- ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก PYTHONCOERCECLOCALE=warn์ ์ค์ ํ๋ฉด Python์ ๋ก์บ ๊ฐ์ ๋ณํ์ ํ์ฑํํ๊ฑฐ๋ Python ๋ฐํ์์ด ์ด๊ธฐํ ๋ ๋ ๊ฐ์ ๋ก ๋ณํ์ ํ์ฑํํ๋ ๊ฒฝ์ฐ stderr์ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ฐ์์ํต๋๋ค.
- ๋ก์บ ๊ฐ์ ๋ณํ์ด ๋นํ์ฑํ๋์๊ฑฐ๋ ์ ์ ํ ๋์ ๋ก์บ์ด ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ์๋, ๊ธฐ์กด์ ASCII ๊ธฐ๋ฐ ๋ก์บ์ด ์๋ ๋ก์บ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ PYTHONUTF8๋ ์ฌ์ ํ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ฉ๋๋ค. ์์คํ ์ธํฐํ์ด์ค์ UTF-8 ๋์ ASCII๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋นํ์ฑํํด์ผ ํฉ๋๋ค.
PYTHONDEVMODE
- ์ด ํ๊ฒฝ ๋ณ์์ ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ์ค์ ํ๋ฉด Python ๊ฐ๋ฐ ๋ชจ๋๊ฐ ํ์ฑํ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ง ์๋ ์ถ๊ฐ ๋ฐํ์ ๊ฒ์ฌ๊ฐ ๋์ ๋ฉ๋๋ค.
- ์ด๋ -X dev ์ต์ ์ ์ค์ ํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
PYTHONUTF8
- ๊ฐ์ด 1๋ก ์ค์ ๋๋ฉด, Python UTF-8 ๋ชจ๋๊ฐ ํ์ฑํ๋ฉ๋๋ค.
- ๊ฐ์ด 0์ผ๋ก ์ค์ ๋๋ฉด, Python UTF-8 ๋ชจ๋๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค.
- ๋ค๋ฅธ ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ์ค์ ํ๋ฉด, ์ธํฐํ๋ฆฌํฐ ์ด๊ธฐํ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
PYTHONWARNDEFAULTENCODING
- ์ด ํ๊ฒฝ ๋ณ์์ ๋น์ด ์์ง ์์ ๋ฌธ์์ด์ ์ค์ ํ๋ฉด, ๋ก์บ๋ณ ๊ธฐ๋ณธ ์ธ์ฝ๋ฉ์ด ์ฌ์ฉ๋ ๋ EncodingWarning์ ๋ฐ์์ํต๋๋ค.
- ์์ธํ ๋ด์ฉ์ Opt-in EncodingWarning์ ์ฐธ์กฐํ์ญ์์ค.
PYTHONNODEBUGRANGES
- ์ด ๋ณ์๊ฐ ์ค์ ๋๋ฉด, ์ฝ๋ ๊ฐ์ฒด์ ๊ฐ ๋ช ๋ น๋ฌธ์ ๋ํ ์ถ๊ฐ ์์น ์ ๋ณด (๋ ํ, ์์ ์ด ์คํ์ ๋ฐ ๋ ์ด ์คํ์ )๋ฅผ ๋งคํํ๋ ํ ์ด๋ธ์ ํฌํจํ์ง ์์ต๋๋ค. ์ด๋ ๋ ์์ ์ฝ๋ ๊ฐ์ฒด ๋ฐ pyc ํ์ผ์ ์ํ ๋ ์ ์ฉํ๋ฉฐ, ์ธํฐํ๋ฆฌํฐ๊ฐ ์ถ์ ์ ํ์ํ ๋ ์ถ๊ฐ ์๊ฐ์ ์์น ํ์๋ฅผ ์ต์ ํ๋ ๋ฐ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PYTHONPERFSUPPORT
- ์ด ๋ณ์๊ฐ 0์ด ์๋ ๊ฐ์ ๊ฐ์ง๋ฉด, Linux perf ํ๋กํ์ผ๋ฌ์ ์ง์์ ํ์ฑํํ์ฌ Python ํธ์ถ์ ๊ฐ์งํ ์ ์์ต๋๋ค.
- ๊ฐ์ด 0์ผ๋ก ์ค์ ๋๋ฉด, Linux perf ํ๋กํ์ผ๋ฌ ์ง์์ด ๋นํ์ฑํ๋ฉ๋๋ค.
- Linux perf ํ๋กํ์ผ๋ฌ์ ๋ํ Python ์ง์ ๋ฐ -X perf ์ปค๋งจ๋ ๋ผ์ธ ์ต์ ์ ์ฐธ์กฐํ์ญ์์ค.
PYTHONDUMPREFS
- ์ค์ ๋๋ฉด, Python์ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ข ๋ฃํ ํ์๋ ์ฌ์ ํ ์ด์ ์๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ๋คํํฉ๋๋ค.
- --with-trace-refs ๋น๋ ์ต์ ์ผ๋ก Python์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
PYTHONDUMPREFSFILE=FILENAME
- ์ค์ ๋๋ฉด, Python์ ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ข ๋ฃํ ํ์๋ ์ฌ์ ํ ์ด์ ์๋ ๊ฐ์ฒด์ ์ฐธ์กฐ ์นด์ดํธ๋ฅผ FILENAME์ด๋ผ๋ ํ์ผ์ ๋คํํฉ๋๋ค.
- --with-trace-refs ๋น๋ ์ต์ ์ผ๋ก Python์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
'๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[pip] WARNING: Skipping due to invalid metadata entry 'name' (0) | 2023.12.30 |
---|---|
[Python] Command Line Flags (0) | 2023.12.26 |
[pipx] python ์ ์ญ ํจํค์ง๊ด๋ฆฌ pipx (0) | 2023.11.29 |
[mandelbrot set] ๋ง๋ธ๋ธ๋ก ์งํฉ (0) | 2023.11.19 |
[Version] 3.12 rc (Release Candidates) (2) - kwargs, override (0) | 2023.10.26 |