【发布时间】:2019-01-07 22:25:05
【问题描述】:
我们使用的库依赖于另一个名为 Jellyfish 的库。该库实现逻辑,如果有cpython 版本,它将导入该版本。如果没有,它将使用pypy 版本。
Pypy 有一个已知问题(参考:https://github.com/jamesturk/jellyfish/issues/46),变音位库的 pypy 实现与 cpython 版本不一致。
查看我同事的虚拟环境,他们都有在安装时创建的文件cjellyfish.cpython-34m.so,但我没有。结果,我的代码的行为与他们的不同(我们最终在这个 try/except 的其他方面:https://github.com/jamesturk/jellyfish/blob/master/jellyfish/init.py)
我很好奇为什么我的系统没有cjellyfish.cpython-34m.so 文件,而其他的却有。诚然,这可能是因为我不太熟悉 pip 安装过程中发生的事情,以及编译可能发生在什么阶段。
所以我有几个问题,所有这些都可能相关:
1)您能想到什么会导致文件无法生成吗?
2) 如果编译失败,我可以寻找一个地方会有错误/日志消息吗?
3) 有人可以解释或指出一个资源,了解在生成已编译的cpython.so 文件的pip install somelibrary 过程中发生的事情吗?
我的系统信息:
- Ubuntu 18.04
- 在 pyenv 中运行的 Python 3.4.3
- 平台版本为
#45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018 -
platform.python_implementation()在本地是CPython(与我的同事匹配) -
platform.python_compiler()是“GCC 7.3.0”,与我的同事不同(例如GCC 4.4.7 20120313 (Red Hat 4.4.7-11))
【问题讨论】:
-
取决于它的安装方式。
.so文件并不总是必要的。通常python会先搜索.so文件,然后再搜索.py文件。运行strace -o trace_output.txt python向您展示它是如何工作的。