我对如何安装/配置Python软件包依赖项有一个概念上的疑问,这与编译配置有关。
情况1
pyscreenshot, image, pillow
使用ucs2
在用户库空间(--user)中配置的python 2.7使用pip安装的软件包。执行一些api以获得桌面截图,一切运行平稳。
情况二
执行另一个配置了的python 2.7 ucs4
,它将查找那些已安装在用户空间中的软件包。执行相同的api获取桌面截图,它崩溃了。ucs4配置与软件包的工作方式不兼容。
那为什么会这样呢?能否根据Python的配置安装相同软件包的不同版本?
注意:ucs2 / ucs4说明https://docs.python.org/2/c-api/unicode.html
那为什么会这样呢?
发生这种情况的原因是,当两个C(二进制)代码都加载到内存中时,每个代码都以不同的方式处理字符串。在python文档中明确指出:“ ... UCS2和UCS4 Python构建不与二进制兼容。编写扩展或接口时请记住这一点。”
文档还说:“ Python的默认构建对Py_UNICODE使用16位类型,并将Unicode值内部存储为UCS2。” 因此,您要做的是:安装与默认解释器兼容的软件包,并使用不兼容的Python解释器运行它。
能否根据Python的配置安装相同软件包的不同版本?
我不确定pip是否能够处理UCS2和UCS4软件包变体。如果使用UCS4解释器中的pip安装相同的软件包,会发生什么情况?如果在使用UCS4版本的pip时安装了该软件包的UCS2版本,则建议下载该软件包的源发行版,并使用UCS4自己对其进行编译。
我知道pip可以区分os(windows / linux)和ABI,但我认为它不能处理UCS差异。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句