我试图安装Python包dulwich:
pip install dulwich
Run Code Online (Sandbox Code Playgroud)
但我得到一个神秘的错误信息:
error: Unable to find vcvarsall.bat
Run Code Online (Sandbox Code Playgroud)
如果我尝试手动安装包,也会发生同样的情况:
> python setup.py install
running build_ext
building 'dulwich._objects' extension
error: Unable to find vcvarsall.bat
Run Code Online (Sandbox Code Playgroud) 我需要将一个小dict
对象保存到磁盘,其对象的类型str
和值是int
s ,然后恢复它.像这样的东西:
{'juanjo': 2, 'pedro':99, 'other': 333}
Run Code Online (Sandbox Code Playgroud)
什么是最好的选择,为什么?用pickle
或用simplejson
?序列化?
我使用的是Python 2.6.
我使用python 2.7并试图挑选一个对象.我想知道泡菜协议之间真正的区别是什么.
import numpy as np
import pickle
class data(object):
def __init__(self):
self.a = np.zeros((100, 37000, 3), dtype=np.float32)
d = data()
print "data size: ", d.a.nbytes/1000000.
print "highest protocol: ", pickle.HIGHEST_PROTOCOL
pickle.dump(d,open("noProt", 'w'))
pickle.dump(d,open("prot0", 'w'), protocol=0)
pickle.dump(d,open("prot1", 'w'), protocol=1)
pickle.dump(d,open("prot2", 'w'), protocol=2)
out >> data size: 44.4
out >> highest protocol: 2
Run Code Online (Sandbox Code Playgroud)
然后我发现保存的文件在磁盘上有不同的大小:
noProt
:177.6MB prot0
:177.6MB prot1
:44.4MB prot2
:44.4MB我知道这prot0
是一个人类可读的文本文件,所以我不想使用它.我猜协议0是默认给出的协议.
我想知道协议1和协议2之间的区别是什么,我有理由选择其中一个或另一个吗?
什么是更好用,pickle
或cPickle
?
这可能很傻但我无法安装cPickle
python 3.5 docker镜像
Dockerfile
FROM python:3.5-onbuild
Run Code Online (Sandbox Code Playgroud)
requirements.txt
cpickle
Run Code Online (Sandbox Code Playgroud)
当我尝试构建图像时
$ docker build -t sample .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM python:3.5-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
---> Running in 016c35a032ee
Collecting cpickle (from -r requirements.txt (line 1))
Could not find a version that satisfies the requirement cpickle (from -r requirements.txt (line 1)) (from versions: )
No …
Run Code Online (Sandbox Code Playgroud) 我正在运行创建大型对象的代码,包含多个用户定义的类,然后我必须将其序列化以供以后使用.据我所知,只有酸洗才能满足我的要求.我一直在使用cPickle存储它们,但它生成的对象大小约为40G,代码运行在500 MB的内存中.序列化的速度不是问题,但对象的大小是.是否有任何提示或替代流程可以使泡菜变小?
我正在实现一个需要序列化和反序列化大对象的程序,所以我正在进行一些测试pickle
,cPickle
并marshal
选择模块来选择最佳模块.一路上我发现了一些非常有趣的东西:
我正在使用dumps
然后loads
(对于每个模块)列表中的dicts,元组,整数,浮点数和字符串.
这是我的基准测试的输出:
DUMPING a list of length 7340032
----------------------------------------------------------------------
pickle => 14.675 seconds
length of pickle serialized string: 31457430
cPickle => 2.619 seconds
length of cPickle serialized string: 31457457
marshal => 0.991 seconds
length of marshal serialized string: 117440540
LOADING a list of length: 7340032
----------------------------------------------------------------------
pickle => 13.768 seconds
(same length?) 7340032 == 7340032
cPickle => 2.038 seconds
(same length?) 7340032 == 7340032
marshal => 6.378 seconds
(same …
Run Code Online (Sandbox Code Playgroud) 什么是更快:
(A)'Unpickling'(正在加载)一个酸洗字典对象,使用 pickle.load()
要么
(B)使用将JSON文件加载到字典 simplejson.load()
假设:在案例A中已存在pickle对象文件,并且在案例B中已存在JSON文件.
python ×7
pickle ×5
json ×2
docker ×1
numpy ×1
performance ×1
pip ×1
python-2.7 ×1
python-3.5 ×1
setup.py ×1
simplejson ×1
windows ×1