我对如何安装/配置Python包依赖项有一个概念上的疑问,这与编译配置有关。
案例1
使用 pip 从用户库空间 (--user) 中配置了 ucs2
的 python 2.7 安装了软件包 pyscreenshot、image、pillow
。执行了一些api来获取桌面截图,一切运行顺利。
案例2
执行另一个配置有 ucs4 的 python 2.7,它找到了由于这些包安装在用户空间中的包。执行相同的 api 来获取桌面屏幕截图,它崩溃了。 ucs4 配置与软件包的工作方式不兼容。
那么为什么会发生这种情况呢?是否可以根据 Python 的配置方式安装相同软件包的不同版本?
注意: ucs2/ucs4 说明 https://docs.python.org/2/c-api/unicode.html
最佳答案
So why that happened?
发生这种情况是因为当两个 C(二进制)代码都加载到内存中时,它们各自以不同的方式处理字符串。在 python documentation明确指出:“... UCS2 和 UCS4 Python 版本不兼容二进制。请在编写扩展或接口(interface)时牢记这一 pip 。”
文档还指出:“Python 的默认版本使用 Py_UNICODE 的 16 位类型,并将 Unicode 值在内部存储为 UCS2。”所以你所做的就是:安装一个与默认解释器兼容的包并使用不兼容的Python解释器运行它。
could different versions of the same packages be installed depending on how Python was configured?
我不确定 pip 是否能够处理 UCS2 和 UCS4 包变体。当您使用 UCS4 解释器中的 pip 安装相同的软件包时会发生什么?如果在使用 UCS4 版本的 pip 时安装了 UCS2 版本的软件包,我建议您下载该软件包的源代码发行版并使用 UCS4 自行编译。
我知道pip可以区分操作系统(windows/linux)和ABI,但我不认为它可以处理UCS差异。
关于python-2.7 - 使用 pip 安装的包是否会根据 python 配置发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56382621/