对于Python包依赖项是如何安装/配置的,我有一个概念上的疑问,这与编译配置有关。
案例1
在用户库空间(-- user )中使用Python2.7中的pip安装了pyscreenshot, image, pillow包,其中配置了ucs2。执行了一些api来获得桌面屏幕截图,一切运行顺利。
案例2
执行另一个用ucs4配置的python2.7,它会发现包是安装在用户空间中的。执行相同的api来获取桌面屏幕快照,它就会崩溃。ucs4配置与包的工作方式不兼容。
那为什么会发生这种事?是否可以根据Python的配置方式安装相同软件包的不同版本?
注:ucs2 2/ucs2 4解释https://docs.python.org/2/c-api/unicode.html
发布于 2019-05-30 20:38:44
那为什么会发生这种事?
之所以发生这种情况,是因为当两个C(二进制)代码加载到内存中时,每个代码都以不同的方式处理字符串。在python文档中,我们清楚地指出:“. UCS2和UCS4构建并不是二进制兼容的,在编写扩展或接口时请记住这一点。”
文档还指出:“Python的默认构建为Py_UNICODE使用16位的类型,并在内部将Unicode值存储为UCS2。”因此,您所做的就是:安装一个与默认解释器兼容的包,并使用不兼容的Python解释器运行它。
是否可以根据Python的配置方式安装相同软件包的不同版本?
我不确定pip是否能够处理UCS2和UCS4包变体。当您使用来自UCS4解释器的pip安装相同的软件包时会发生什么?如果在使用pip的UCS2版本时安装了包的UCS4版本,我建议下载包的源代码分发版,并自己使用UCS4编译它。
我知道pip可以区分os (windows / linux)和ABI,但我认为它不能处理UCS之间的差异。
https://stackoverflow.com/questions/56382621
复制相似问题