2019. 8. 12. 21:04ㆍ분석 Python/구현 및 자료
최근에 사용한 패키지 상태를 그대로 유지하면서, 다시 사용해야 할 때 전달해야 하는 이슈가 있었다.
그래서 처음에는 pickle로 저장해봤는데, 안되서 이유를 찾아보니 밑에 글에 잘 정리된 게 있으니 확인해보시길 바란다!
사실 R에서는 .RData로 몽땅 집어넣을 수가 있는데, 이것이 되는지가 궁금했다
https://lovit.github.io/analytics/2019/01/15/python_dill/
결론은 serializable 하기 때문에 안된다고 한다!
그래서 좌절하고 있다가 위에서 알켜준 방법인 dill을 해보려고 했다!
dill 패키지는 serializable 하지 않은 값들도 손쉽게 binary 로 저장이 가능합니다.
일단 이것은 저장이 되었다!
하지만 내가 궁극적으로 원하는 것은 모든 패키지를 찾아서 사전에 때려놓고, 그 네이밍을 유지한 상태로 그대로 사용하는 것이었다.
그래서 시도를 하고 되서 공유를 한다!
일단 시도를 해볼것은 다음과 같다
1. numpy package
2. 내가 정의한 함수에다가 거기다가 import numpy 해보기
3. class 정보
이 3개를 사전에 넣어서 그대로 사용하려고 한다.
import numpy as np
def add(x,y) :
import numpy as np
def mat(x,y) :
return x*y*2
return x + mat(x,y) + np.random.normal(size= 1)
class Test :
def na(a) :
return a
일단 전체 패키지 list를 확인하고자 다음과 같은 코드를 만들었다.
import re
package_list = {}
for i in list(locals().keys()) :
if re.search("^_|ipython" , i) is None :
if re.match("In|Out|exit|quit|i" , i ) is None :
if re.search("^<function|^<module|^<class" , str(locals()[i])) is not None :
package_list[i] = locals()[i]
난 이것을 통째로 저장하고 싶은 것이다!
일단 한개씩 불러오면 다음과 같이 잘 작동하는 것을 알 수 있다.
그러면 이제부터 dill 패키지를 이용해서 테스트!
일단 해보니 안정적으로 잘 저장되고 잘 불러와졌다.
과연 그러면 똑같이 작동할까?
import dill
## 저장!
with open("./save_add.pkl" , "wb") as f:
dill.dump(package_list , f)
## 불러들이기!!
with open('./save_add.pkl', 'rb') as f:
f = dill.load(f)
-작동 완료 끝-
'분석 Python > 구현 및 자료' 카테고리의 다른 글
[ Python ] logging 만들어보기 (FileHandler 와 StreamHandler 위주로) (0) | 2019.08.25 |
---|---|
[ Python ] multiprocessing / concurrent.futures (0) | 2019.08.18 |
[ Python ] threading 에 대해서 잘 설명된 글 (0) | 2019.08.11 |
[ Python ] 동시성과 Future / concurrent.futures 알아보기 (0) | 2019.08.11 |
[ Python ] thread 공부해보기-2 (0) | 2019.08.11 |