0

在 Linux 上使用源代码安装 SciPy 1.7.1时

python setup.py build
python setup.py install

(以及需要的环境和site.cfg黑客攻击)我最终得到了一个破碎的构建。我的特定构建配方适用于 SciPy <= 1.6

构建 SciPy 1.7.1 后,导入 egscipy.optimizescipy.special导致错误

AttributeError:模块“scipy.special._ufuncs_cxx”没有属性“ pyx_capi

ImportError:无法从“scipy.linalg._solve_toeplitz”导入名称“levinson”

ImportError:无法从“scipy.sparse.csgraph._tools”导入名称“csgraph_to_dense”

发生了什么变化,我该如何解决?

4

1 回答 1

0

查看site-packages目录,我看到 SciPy 1.7 将自身安装为压缩的 Python Egg,而以前的版本用于安装为目录(尽管仍然是 Python Egg)。可以通过指定zip_safe参数来选择此行为setuptools.setup(),从内部调用setup.py。在 SciPy 1.7 中,这被称为

setup(**metadata)

metadata不包括'zip_safe',表示自动确定带拉链的鸡蛋是否可以安全使用。这也可能是旧 SciPy 版本的情况,但无论出于何种原因,该过程最终都会在我的系统上声明 zipped egg 对 1.7 是安全的,但似乎并非如此。

手动添加

metadata['zip_safe'] = False

以上setup(**metadata)在执行setup.py结果之前,鸡蛋是一个目录(而不是压缩存档),并且构建工作。

要以setup.py编程方式进行修补,请使用例如(GNU sed)

sed -i "s/\(^ *\)\(setup *(.*\)$/\1metadata['zip_safe'] = False; \2/" setup.py
于 2021-08-17T22:52:40.983 回答