์
์์ ์ธ ๋ฐ์ดํฐ๊ฐ์๋ numpy๋ก๋ ๊ธฐ๋ฅ์ ๊ณต๊ฒฉ์ด ์ธํฐ๋ท์์ ์
์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ ๋ช
๋ น ์คํ์ ์ ๋ฐํฉ๋๋ค.
์ฌ์ฉ์๊ฐ๋ก๋ํ๋ฉด ๋ช
๋ น์ด ์คํ๋ฉ๋๋ค.
import numpy
from numpy import __version__
print __version__
import os
import pickle
class Test(object):
def __init__(self):
self.a = 1
def __reduce__(self):
return (os.system,('ls',))
tmpdaa = Test()
with open("a-file.pickle",'wb') as f:
pickle.dump(tmpdaa,f)
numpy.load('a-file.pickle')
1.14.6
๋ฒ์ <= 1.16.0, ์๋ ํจ
์, ์ด๊ฒ์ด np.load(allow_pickle=True)
์ด ์ถ๊ฐ ๋ ์ด์ ์
๋๋ค. ์ด์ ๊ธฐ๋ณธ๊ฐ ์ธ False
ํ๊ณ ์ ์ฝ์ ์์๋ ๋ฉ์์ง๋ฅผ ์ ๊ณต ํ ์์์ ๊ฒ ๊ฐ์ต๋๋ค. "use allow_pickle="True"
์ด ํ์ผ์ ์ ๋ขฐํ์ญ์์ค ".
๋๋ ์ด๊ฒ์ด ๋ ๋์ ๊ธฐ๋ณธ๊ฐ์ด๋ผ๋ ๋ฐ ๋์ํ๋ฏ๋ก ๋ถํํ๋ ๋ชจ๋ ๊ณผํ์๋ค์ด ์คํ์ค์์ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ (๋๋ ๊ทธ๋ฅ ์ ์ฅ / ๋ค์๋ก๋)ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์ฝ๊ฐ ์๋๋ฌ์ด ๊ฒฝ์ฐ์๋ ์ง์ ์ค๋จ์ ์ถ์งํ ์ ์์ต๋๋ค.
๊ทธ๋์ allow_pickle
๋ 2015 ๋
4 ์์ ์ถ๊ฐ๋์์ผ๋ฏ๋ก numpy 1.10๋ถํฐ ์กด์ฌ ํ์ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์ 1.17์ ์ฌ์ฉ / ์ง์ํ๋ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ ํ 1.10 (kwarg์ ์ง์ํ๊ฑฐ๋ ์ง์ํ์ง ์๋ ๊ณ ํต์ ์ ๊ฑฐํจ)์ ์ง์ํ ๊ฒ์ด๋ผ๊ณ ์์ฌํ๊ธฐ ๋๋ฌธ์ ์์ง์์ด ๋ ํ์ค์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ๋ก์๋ scipy๊ฐ ๋ฒ์ 1์์ ์ฌ์ ํ 1.8์ ์ง์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ค๋ ์ง์๋ ๊ฒ ๊ฐ์
์ํํ ์ ํ์ ์ํ๋ฉด ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ ์ง๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@Plazmaz ๋ ๋ฌผ๋ก ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์์
์ ์ค๋จํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด VisibleDeprecationWarning์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ ๋๋ ๋ ๋ฒ์ ๋ฆด๋ฆฌ์ค ํ์ ์ง์ ์ค๋จํ์ญ์์ค. ๋ฌธ์ ๋ ํ์ํ ๊ฒฝ์ฐ ํด๊ฒฐํ๋ ๊ฒ์ด ๊ท์ฐฎ๊ณ ์ผ๋ถ ์ด์ ๋ฒ์ ์๋ kwarg๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๊ฒฝ๊ณ ๋ฅผ ํผํ๊ณ ๋ ๋ค ์ง์ํ๋ ค๋ฉด if np.__version__ > ...: use kwarg else do not use kwarg
๋ฅผ ์ํํด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด์จ๋ 1.17์ ๋ค์ด๊ฐ ์์๋ ์ข์ ๊ธฐํ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ PR์ด ์ด๋ ค ์๋ค๊ณ ๋๋ผ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๋ถํํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ฉ์ผ ๋ง๋ฆฌ์คํธ๋ฅผ ํ (ping) ํ ์ ์์ต๋๋ค.
์๋ ํ์ธ์, Fedora numpy RPM ๊ด๋ฆฌ์์ ๋๋ค. ๋ฐฐํฌํ ํจํค์ง์์ ์ด๊ฒ์ ์ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค. ์ฐ๋ ค ์์ค์ ๋ฐ๋ผ ์กฐ๋ง๊ฐ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐ ํ ์์ ์ด๋ฏ๋ก 1.17์ ํ์คํ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๊ทน๋๋ก ์ผ๋ คํ๋ ๊ฒฝ์ฐ ๋ฐฑ ํฌํ ๋๋ ๋ ๋นจ๋ฆฌ ์ด๋ํ๋ ๊ฒ์ ๋ํด ๋ ผ์ ํ ์ ์์ง๋ง ์ด๋ ๋ค์ด ์คํธ๋ฆผ์ด ์ด์ ์์กดํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ฌ๋ผ์ง๋๋ค.
๋๋ ์ด๊ฒ์ ์ํด ๋ ธ๋ ฅ ํ๊ณ ์๋ค.
cc @jeanqasaur re : ๋ณด์ / ์ทจ์ฝ์ฑ ์ ๋ฌธ์ฑ
์๋ ํ์ธ์, Fedora numpy RPM ๊ด๋ฆฌ์์ ๋๋ค. ๋ฐฐํฌํ ํจํค์ง์์ ์ด๊ฒ์ ์ํํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
@limburgher : ํ๋๋ผ๋ ํ์ด์ฌ์ ๋ด์ฅ ๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ๋ํด ๋ฌด์์ํฉ๋๊น? ์ด๊ฒ์ด ์ํ๊ฐ ํ์ํ ๊ฒ์ธ์ง๋ ๋ถ๋ช ํ์ง ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐ๋ํ์ง๋ ์์ง๋ง ์ด๊ฒ์ ์ทจ์ฝ์ ์ผ๋ก ์ ์ธํ๋ ๊ฒ์ ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ํ๋๊ณ ์ค๊ณ๋๋๋ก ์๋ํฉ๋๋ค.
๋ถํํ๋ ๊ท์น์ CVE ๋ฒํธ๊ฐ ํ ๋น๋๋ฉด ๋ ์ด์ ๋ฒ๊ทธ๊ฐ ์๋์ง ์ฌ๋ถ๊ฐ ์ค์ํ์ง ์์ผ๋ฉฐ ๋ฐฐํฌํ์ ๊ณ ๊ฐ์๊ฒ ๊ฐ์น๋ฅผ ์ ๊ณตํ๊ณ ์์์ ์ฆ๋ช ํ๊ธฐ ์ํด ๋ฌด์ธ๊ฐ ๋ฅผ ์๋ํด์ผ
save
๋ฐ load
๋์ ํน์ ํ์ผ์ด ํผํด์ ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ฃ ? ๋ ๊ฒฝ์ฐ ๋ชจ๋ allow_pickle=False
๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. save
๋๋ load
์ค์ ๋ก ํ์ํ ๊ฒฝ์ฐ์ ์ ํํ ์ด๋ค ์ข
๋ฅ์ ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๋ ์ค๊ฐ ๊ธฐ๊ฐ์ ๋์ญ์์ค. ํผํด์ ์ฌ์ฉํ๊ณ allow_pickle
๊ฐ ์ง์ ๋์ง ์์์ต๋๋ค.
@ eric-wieser stdlib ํผํด๊ณผ์ ์ฐจ์ด์ ์ load
/ save
์ค์ ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํผํด ์ฌ์ฉ์ ํผํ ์ ์๋ค๋ ๊ฒ์
๋๋ค (์ : ๊ธฐ๋ณธ ์ ํ์ ๊ฐ๋จํ ๋ฐฐ์ด). pickle์ ๊ฐ์ฒด ๋ฐฐ์ด์ด๋ IIRC ํน์ ๋ณต์กํ dtype๊ณผ ๊ฐ์ ๋ ์ด๊ตญ์ ์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ๋๋ถ๋ถ ์์ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ๋ฌธ์๋ฅผ ์ถฉ๋ถํ ์์ธํ ์ฝ์ง ์์ผ๋ฉด ์์ ํ์ง ์์ ์ผ์ด์ค๊ฐ ์กด์ฌํ๋ค๋ ์ฌ์ค์ ๋์น ์ ์์ต๋๋ค. ์ด์จ๋ "์์ ๋ชจ๋"์ "์์ ํ์ง ์์ ๋ชจ๋"๊ฐ ๋ชจ๋์๋ ๊ฒฝ์ฐ "์์ ๋ชจ๋"๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. stdlib pickle OTOH์ ๊ฒฝ์ฐ ํญ์ 100 % ์์ ํ์ง ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค.
์์งํ ๋ฌธ์ํ ๋ ์๋์ ์ธ ๊ธฐ๋ฅ์ด๋ผ๋ฉด ํนํ ์์ ์ด ๊ธฐ๋ณธ๊ฐ ์ธ ๊ฒฝ์ฐ ์์ฌ์ ์ผ๋ก BZ๋ฅผ ๋ซ์ ์ ์์ต๋๋ค. ์ ๋ ์ฐ๋ฆฌ๊ฐ ํ์ด์ฌ์ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ด๊ฐ ๋ณผ๊ฒ.
์ฌ์์ ์ดํด๋ณด๋ฉด ๊ทธ ์ ์์ ์ ์คํธ๋ฆผ์์ ์๋ฌด๊ฒ๋ ๋ณ๊ฒฝํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
CVE์ ๋ํด ์ด์๊ฐ ์ ๊ธฐ ๋์์ต๋๊น? ๊ทธ๋ฌ๋ฉด ๊ด๋ฆฌ์์๊ฒ ์๋๋ฆฌ์ค๊ฐ ๋ ๋ช ํํด์ง ์ ์์ต๋๋ค.
CVE๋ ๋์ฒด๋ก ๊ฐ์ง๋ก ๋ณด์
๋๋ค. numpy.load
๊ฐ ์์์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค๋ ๊ฒ์ ์ ์๋ ค์ ธ ์๊ณ ๋ฌธ์ํ๋์ด ์์ผ๋ฉฐ ์ง๋ ฌํ ๋ Python ๊ฐ์ฒด ๋ฐฐ์ด์๋ก๋ํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์ฌ์ฉ์๋์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ allow_pickle=False
๋ฅผ ์ ๋ฌํ์ฌ ๊ฐ์ฒด ๋ฐฐ์ด๋ก๋๋ฅผ ๊ธ์ง ํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ์ด ๋ช ์ ์ ์ผ๋ก ์์ฒญ๋์์ ๋๋ง ๊ฐ์ฒด ๋ฐฐ์ด์๋ก๋ํ๋ ๊ฒ์ด ๋ ์ข์์ ๊ฒ์ด์ง๋ง ์ญ์ฌ์ ์ด์ ๋๋ฌธ์ ๋๋ค. ์ ํ์ ์ด์ ์๋ ์ ์๋์์ผ๋ฉฐ, ์์ ๋ ผ์๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ํต์ ํ ์ ์๊ฒ ๊นจ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ Python ํผํด ๋ง๊ณผ ์ ์ฌํ๊ฒ numpy.load
๋ถ์ฃผ์ํ๊ฒ ์ฌ์ฉํ๋ฉด ๋ค์ด ์คํธ๋ฆผ ์ ํ๋ฆฌ์ผ์ด์
์ ์ทจ์ฝ์ฑ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
numpy.load
๊ฐ ์์์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค๋ ๊ฒ์ ์ ์๋ ค์ ธ ์๊ณ ๋ฌธ์ํ๋์ด ์์ผ๋ฉฐ ์ง๋ ฌํ ๋ Python ๊ฐ์ฒด ๋ฐฐ์ด์๋ก๋ํ๋ ๋ฐ ํ์ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋ฌธ์ํ๋์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์ ๋ ๋ช ๋
๋์ numpy๋ฅผ ์ฌ์ฉํด ์์ง๋ง numpy.save
/ numpy.load
์ ๋น๋ฒํ ์ฌ์ฉ์๋ ์๋์ง๋ง numpy.load
์ ๋ํด ์ ํ ๋ถ๋ช
ํ์ง ์์์ต๋๋ค. pickle
์ ๋์ผํ ์ทจ์ฝ์ ์ด ์์ต๋๋ค. ๋ฌผ๋ก ๋๋ numpy.load
๊ฐ pickle
์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋ชฐ๋์ต๋๋ค (๋๋ numpy-native ๋ฐฐ์ด๋ง์ ์ฌ์ฉํ๊ณ @njsmith๊ฐ ์ธ๊ธ ํ ์๋๋ฆฌ์ค์ ์ ํํ ์ผ์นํ๋ ์๊ฐ์ํ์ง ์์์ต๋๋ค).
pickle
์ด ์ทจ์ฝํ๋ค๋ ์ฌ์ค์ ์ ์๋ ค์ ธ ์์ผ๋ฉฐ, ๋ฌธ์์๋ ์๋จ์ ํฐ ๋นจ๊ฐ์ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค.
๊ฒฝ๊ณ :
pickle
๋ชจ๋์ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ์ ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ์ ๋ํด ์์ ํ์ง ์์ต๋๋ค. ์ ๋ขฐํ ์ ์๊ฑฐ๋ ์ธ์ฆ๋์ง ์์ ์์ค์์๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ํผํดํ์ง ๋ง์ญ์์ค.
์ด์ ๋นํด numpy.load
์ ๋ฌธ์ ๋ allow_pickle
ํค์๋์ ๋ํ ์ค๋ช
์์ ์ ์ฒด ๋ณด์ ์ธก๋ฉด
allow_pickle : _bool, optional_
npy ํ์ผ์ ์ ์ฅ๋ ํผํด ๋ ๊ฐ์ฒด ๋ฐฐ์ด์๋ก๋ ํ ์ ์์ต๋๋ค. ํผํด์ ํ์ฉํ์ง ์๋ ์ด์ ์๋ ํผํด ๋ ๋ฐ์ดํฐ๋ฅผ๋ก๋ํ๋ฉด ์์ ์ฝ๋๊ฐ ์คํ๋ ์ ์์ผ๋ฏ๋ก ๋ณด์์ด ํฌํจ๋ฉ๋๋ค. ํผํด์ด ํ์ฉ๋์ง ์์ผ๋ฉด ๊ฐ์ฒด ๋ฐฐ์ด๋ก๋๊ฐ ์คํจํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ : True
์ ์ด๋ allow_pickle=False
์ด ๊ธฐ๋ณธ๊ฐ์ด ๋ ๋๊น์ง numpy.load
์ ๋ฌธ์์ Big Red Warning์ ๋ฃ์ ์ ์๋ค๋ฉด ์ซ์ดํ์ง ์์ ๊ฒ์
๋๋ค. ๋ณํ๊ฐ๋ณด๊ณ ๋ ๋๊น์ง numpy.load
ํ๋์ ๋ง์ํ๋ค๋ ์ ์์ ๊ฐ์ ๋ถ์ ๊น๋ฐ์ ์ ๊ธฐํ๋ค pickle.load
๋ฐ์์ํต๋๋ค.
numpy.load
๋ํ ๋ฌธ์ PR ํ์
์ด์ ๋ฌธ์ ์ ํผํด์ ๋ํ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค.
๋ถํํ๋ ๊ท์น์ CVE ๋ฒํธ๊ฐ ํ ๋น๋๋ฉด ๋ ์ด์ ๋ฒ๊ทธ๊ฐ ์๋์ง ์ฌ๋ถ๊ฐ ์ค์ํ์ง ์์ผ๋ฉฐ ๋ฐฐํฌํ์ ๊ณ ๊ฐ์๊ฒ ๊ฐ์น๋ฅผ ์ ๊ณตํ๊ณ ์์์ ์ฆ๋ช ํ๊ธฐ ์ํด _ ๋ฌด์ธ๊ฐ _ ์๋ํด์ผํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง๋ ํ์คํ์ง ์์ง๋ง, ํ์ฌ์ ์ด์์ง์ ์ง์์ ์ผ๋ก ๋์ณ๋๋ ์ทจ์ฝ์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ํญ์ ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ผ๋ฉฐ,์ด๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋๊ตฌ๋ ๋์์ค๋ฅผ ์ ๋ฌํ ์ฌ์ง๊ฐ ๋ง์ง ์์ต๋๋ค. ๊ฐ๋ค.
@njsmith ๋ ๊ทธ๋ ๊ฒ ๋์์ง ์์ต๋๋ค . numpy.load
๊ธฐ๋ณธ๊ฐ์ allow_pickle
~ False
๋ก ์ค์ ํฉ๋๋ค. ์ค์ ๋ก ์์ ํ ์ด๋ฆฌ์์ ์๊ฐ์ ์๋๋๋ค.
๋ด๊ฐ ๋ณผ ์์๋ ์ ์ผํ ์ํ์ allow_pickle์ ๋ช ์ ์ ์ผ๋ก ์ค์ ํ์ง ์์ ๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์ค๋จ๋๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๊ฒ์ ๋จ์ง ์ต์ข
์ฌ์ฉ์ ์๋์์ ํ๋ก์ ํธ ์ฐ๋ฆฌ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ - ๋ด๊ฐ ์ ๊ณตํ๋ ๋ค์ด ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฑฑ์ mylib.load
๋ฉ์ด np.load
. ๊ฐ์ฒด ๋ฐฐ์ด์๋ก๋ํ์ง ๋ชปํฉ๋๋ค. ๋ค์ ์ธ ๊ฐ์ง ์ค ํ๋๊ฐ ๋ฐ์ํฉ๋๋ค.
allow_pickle=True
์ค์ ์ ๋ค์ ๋ฆด๋ฆฌ์คํฉ๋๋ค. ์ฆ, ๋ค์ด ์คํธ๋ฆผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๊ฒ์ด ๊ทธ๋ค์ด ์ ๊ฒฝ ์ฐ๋ ๊ณต๊ฒฉ ๋ฒกํฐ๊ฐ ์๋๋ผ๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋ํ๋
๋๋ค. ์ฌ์ ํ ํธํ๋์ง ์๋ ๋ฆด๋ฆฌ์ค ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.allow_pickle=False
๋ฅผ ๋
ธ์ถํ์ฌ ๋ฌธ์ ๋ฅผ ๋ค์ด ์คํธ๋ฆผ์ผ๋ก ํธ์ํฉ๋๋ค.๋ด ์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
np.save
์๋ฌด๊ฒ๋ํ์ง ์์ต๋๋ค. ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅํ๋ ๋์ ๋ง์ง๋ง์ ์ฅ๊ธฐ ์คํ ์คํฌ๋ฆฝํธ ์ถฉ๋์ด ๋ฐ์ํ๋ ๊ฒ์ ๋์ฐํ ๊ฒฝํ์
๋๋ค.np.load
์ ๊ธฐ๋ณธ๊ฐ์ None
ํฉ๋๋ค. True
๋๋ False
๋ช
์ ์ ์ผ๋ก ์ ๋ฌํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ๊ฐ์งํ๊ณ ๋ณด์ ( False
)๊ณผ ๊ฐ์ฒด ์ค์์ ์ ํํ๋๋ก ์์ฒญํ๋ ์ํ์ ์ค๋ช
ํ๋ UserWarning
๋ฅผ ๋ด ๋ณด๋
๋๋ค. ๋ฐฐ์ด ์ง์ ( True
). ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ด ๋ณด๋ธ ํ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ธ์ ๋ถ์กฑ์ด๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ ๊ฐ์ง ์ ํ ๋ชจ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ณ์ ๊ฒ์ ์๋๋ฏ๋ก ๊ฒฝ๊ณ ์์ด ๊ธฐ๋ณธ๊ฐ์ ๋ํด ๊ฐ์๊ธฐ ๋ง์์ ๋ฐ๊ฟ์ผํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.@ eric-wieser ์คํฌ๋ฆฝํธ ์ถฉ๋์ ๊ณ ํต์ ๋ํ ์ข์ ์ง์ . ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก UserWarning
๋ฅผ ์ ๊ณต ํ ๊ฒ์
๋๋ค.
๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ฅ๊ธฐ์ ์ผ๋ก load
์์ ๋ฌด์์ํ๊ณ ์ถ์์ง์
๋๋ค. ์ด๋ ์ด๊ฐ ์์ ํ ๋ ๋ชจ๋ ์ฌ๋์๊ฒ kwarg (๊ฒฝ๊ณ ๋ฅผ ๋ฌด์)๋ฅผ ์ฌ์ฉํ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ์์ ๋๊ตฐ๊ฐ๋ฅผ ์ ๊ธ ์ํ์ด ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง ... OTOH, ๊ฒฝ๊ณ ๊ฐ "์์ ํ์ง ์์"๋ก๋์๋ง ํ์๋๋ฉด ๋๋ฌด ๋ฆ์ ์ ์์ต๋๋ค. ์ง๊ธ์ ์ ํ ๊ธฐ๊ฐ์ ์กฐ๊ธ ๋ ๊ธธ๊ฒ ๋ง๋๋ ํธ์ด ์ฝ๊ฐ ์ ํธ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
OTOH, ๊ฒฝ๊ณ ๊ฐ "์์ ํ์ง ์์"๋ถํ์๋ง ํ์๋๋ฉด ๋๋ฌด ๋ฆ์ ์ ์์ต๋๋ค.
์ด๋ ํ ์ชฝ:
-Werror
ํด๋นํ๋ python์ด์๋ ๊ฒฝ์ฐ) ๊ฒฝ๊ณ ๋ฅผ ํ์ํด์ผํฉ๋๋ค.๋ค, ์ ๋ ํ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ํ์ง๋ง ๋ฐฉ๋ํ ์์ ์งง์ ์คํฌ๋ฆฝํธ์ ๋ํด์๋ ์ฝ๊ฐ ์ฑ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
np.load
์ ๊ธฐ๋ณธ๊ฐ์None
ํฉ๋๋ค.True
๋๋False
๋ช ์ ์ ์ผ๋ก ์ ๋ฌํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ๊ฐ์งํ๊ณ ๋ณด์ (False
)๊ณผ ๊ฐ์ฒด ์ค์์ ์ ํํ๋๋ก ์์ฒญํ๋ ์ํ์ ์ค๋ช ํ๋UserWarning
๋ฅผ ๋ด ๋ณด๋ ๋๋ค. ๋ฐฐ์ด ์ง์ (True
). ์ด ๊ฒฝ๊ณ ๋ฅผ ๋ด ๋ณด๋ธ ํ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ ์ํ๋ฅผ ์ ์งํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ธ์ ๋ถ์กฑ์ด๋ผ๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ๋ ๊ฐ์ง ์ ํ ๋ชจ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ณ์ ๊ฒ์ ์๋๋ฏ๋ก ๊ฒฝ๊ณ ์์ด ๊ธฐ๋ณธ๊ฐ์ ๋ํด ๊ฐ์๊ธฐ ๋ง์์ ๋ฐ๊ฟ์ผํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ฑ๊ฐ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ (๋ด ์๊ฐ์) ๊ฐ์ฒด ๋ฐฐ์ด์ ์ ์ฅ /๋ก๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ตฐ๊ฐ๊ฐ ๊ฒฝ๊ณ ๋ฅผ ๋์น ๊ฒฝ์ฐ ์ต์
์ ๊ฒฝ์ฐ๋ (๊ฒฐ๊ตญ)๋ก๋ ํ ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ถฉ๋ํ๊ณ ๋ฐ์ดํฐ๋ ์ฌ์ ํ ๋์คํฌ์ ์์ ํ๋ฉฐ allow_pickle
ํ๋๊ทธ๋ก ์ฌ ์๋ํฉ๋๋ค.
๋จผ์ ์์ ํ๊ฒ๋ก๋๋ฅผ ์๋ํ๊ณ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ์ธํด ์คํจํ ๊ฒฝ์ฐ์๋ง ์ธ์น๋ ๊ฒ์ numpy์ ์ฑ ์์ ๋์ด์์ ๋๊น? ๊ทธ๊ฒ์ ๋๋ถ๋ถ์ (๊ฐ๊ด์ ์ด์ง ์์) ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ์ถ๊ฐ ์์ ์ ์ ๊ฑฐํ์ง๋ง ์ ์ฒด ๋ณด์ ๋ฌธ์ ์ ๋ํ ๊ฐ์์ฑ์ ๊ฐ์์ํฌ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์๋ "์ฌ์ฉ์๊ฐ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผํ๋ค"๊ณ "์ฌ์ฉ์์๊ฒ ๋ถํธ์ ๋ผ์ณ์๋ ์๋๋ค"๋ ๊ฒ์ ์ฝ๊ฐ ๋ชจ์์ ์ธ ๋ ธ๋ ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
* Change the default in `np.load` to `None`. Detect the user not passing in `True` or `False` explicitly, and emit a `UserWarning` explaining the dangers, asking them to choose between security (`False`) and object array support (`True`). Default to the status quo after emitting this warning. It's my understanding that the problem here is lack of awareness. Neither choice is correct in all cases, so I don't think we should suddenly change our minds about the default without warning.
์ด ํจ์น๋ ์ด๋ป์ต๋๊น?
* Change the default in `np.load` to `None`. Detect the user not passing in `True` or `False` explicitly, and emit a `UserWarning` explaining the dangers, asking them to choose between security (`False`) and object array support (`True`). Default to the status quo after emitting this warning. It's my understanding that the problem here is lack of awareness. Neither choice is correct in all cases, so I don't think we should suddenly change our minds about the default without warning.
์ด ํจ์น๋ ์ด๋ป์ต๋๊น?
--- a/numpy/lib/npyio.py
+++ b/numpy/lib/npyio.py
@@ -265,7 +265,7 @@ class NpzFile(object):
return self.files.__contains__(key)
-def load(file, mmap_mode=None, allow_pickle=True, fix_imports=True,
+def load(file, mmap_mode=None, allow_pickle=None, fix_imports=True,
encoding='ASCII'):
"""
Load arrays or pickled objects from ``.npy``, ``.npz`` or pickled files.
@@ -367,6 +367,16 @@ def load(file, mmap_mode=None, allow_pic
memmap([4, 5, 6])
"""
+
+ if allow_pickle is None:
+ UserWarning("""
+ numpy.load() run without explicit setting allow_pickle option.
+ If you are not completely certain about security of the pickled
+ data, you are strongly encouraged to set allow_pickle to False,
+ otherwise you can set it to True.
+ """)
+ allow_pickle = False
+
own_fid = False
if isinstance(file, basestring):
fid = open(file, "rb")
๋๋ ์ฌ์ ํ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ๋ก๋ ํ ๋ ๊ฒฝ๊ณ ์ ์ฐฌ์ฑํฉ๋๋ค. ์ฝ๊ฐ "๋๋ฌด ๋ฆ์ ์ ์์ต๋๋ค". ์ ์ฅํ ๋ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค (์๊ตฌ์ ๊ฒฝ๊ณ ๋ง ํด๋น). ๋ด๊ฐ ๋ ๊ทธ๋ฐ ๊ฒ์ผ๋ก ๋ณ๋ชจํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ณต๊ฐ PR์ด์๋ค. ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก PR์ ๋ง์กฑํฉ๋๋ค.
์ด์จ๋ ๊ณง ์ฌ์ฉ ์ค๋จ์ฃผ๊ธฐ๋ฅผ ์์ํ๋ ๊ฒ์ผ๋ก ์ ํ๋๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ๊ทธ๋ ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค (๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์ ํํ๋ฉด ๋ ๋นจ๋ผ์ง ๊ฒ์
๋๋ค;)). ์์ฒญ์ด ์ง์ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์ ์ง ๋ง ์์ฌ์ค๋ฝ๊ณ ์๋ํ์ง ์๊ณ ๋ ์๊ธฐ ์ด๋ ต์ต๋๋ค.
์ด ๋ฌธ์ ๋ https://nvd.nist.gov/vuln/detail/CVE-2019-6446์ ์ธ๊ธ๋์ด ์์ผ๋ฏ๋ก nexus iq๊ฐ ์ฌ์ ํ ์ทจ์ฝํ๋ค๊ณ ๊ฐ์ฃผํ๋ฏ๋ก์ด ๋ฌธ์ ๋ฅผ ๋ซ์ ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ฌํฉ๋๋ค @ Manjunath07
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ฌ์ ํ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ๋ก๋ ํ ๋ ๊ฒฝ๊ณ ์ ์ฐฌ์ฑํฉ๋๋ค. ์ฝ๊ฐ "๋๋ฌด ๋ฆ์ ์ ์์ต๋๋ค". ์ ์ฅํ ๋ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค (์๊ตฌ์ ๊ฒฝ๊ณ ๋ง ํด๋น). ๋ด๊ฐ ๋ ๊ทธ๋ฐ ๊ฒ์ผ๋ก ๋ณ๋ชจํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ณต๊ฐ PR์ด์๋ค. ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก PR์ ๋ง์กฑํฉ๋๋ค.
์ด์จ๋ ๊ณง ์ฌ์ฉ ์ค๋จ์ฃผ๊ธฐ๋ฅผ ์์ํ๋ ๊ฒ์ผ๋ก ์ ํ๋๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ๊ทธ๋ ๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค (๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์ ํํ๋ฉด ๋ ๋นจ๋ผ์ง ๊ฒ์ ๋๋ค;)). ์์ฒญ์ด ์ง์ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ์ ์ง ๋ง ์์ฌ์ค๋ฝ๊ณ ์๋ํ์ง ์๊ณ ๋ ์๊ธฐ ์ด๋ ต์ต๋๋ค.