在pip安装时更改Biopython编译的包含路径
我在我的工作电脑上(OpenSuse x86_64)尝试用PIP安装Biopython(一个Python包)。
一切都很顺利,直到它开始用numpy的头文件进行一些编译。
gcc -pthread -fno-strict-aliasing -g -O2 -DNDEBUG -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fPIC -I/usr/lib64/python2.7/site-packages/numpy/core/include -I/usr/include/python2.7 -c Bio/Cluster/clustermodule.c -o build/temp.linux-x86_64-2.7/Bio/Cluster/clustermodule.o
在这个时候,它失败了。
Bio/Cluster/clustermodule.c:2:31: fatal error: numpy/arrayobject.h: No such file or directory
这是因为 numpy/arrayobject.h
文件在
/usr/local/lib64/python2.7/site-packages/numpy/core/include/
而不在
/usr/lib64/python2.7/site-packages/numpy/core/include
有没有办法更新设置包含路径的变量(指向 /local
版本),无论是全局的还是专门为这次安装的?
更新
一年多后,我遇到了类似的问题,不过这次我的系统上根本没有 .h
文件。通过把另一个机器上的 .h
文件复制到
/usr/lib64/python2.7/site-packages/numpy/core/include/numpy
目录下,安装就顺利完成了。
1 个回答
2
感谢@Bort的帮助,我发现这似乎是一个已知错误(本地/用户空间的安装本来就不太好使)。
通过编辑Biopython的setup.py
文件的以下几个地方
原始内容
#Add extensions that requires NumPy to build
if is_Numpy_installed():
import numpy
numpy_include_dir = numpy.get_include()
EXTENSIONS.append(
Extension('Bio.Cluster.cluster',
['Bio/Cluster/clustermodule.c',
'Bio/Cluster/cluster.c'],
include_dirs=[numpy_include_dir],
))
EXTENSIONS.append(
Extension('Bio.KDTree._CKDTree',
["Bio/KDTree/KDTree.c",
"Bio/KDTree/KDTreemodule.c"],
include_dirs=[numpy_include_dir],
))
EXTENSIONS.append(
Extension('Bio.Motif._pwm',
["Bio/Motif/_pwm.c"],
include_dirs=[numpy_include_dir],
))
更新后的内容
#Add extensions that requires NumPy to build
if is_Numpy_installed():
import numpy
numpy_include_dir = numpy.get_include()
EXTENSIONS.append(
Extension('Bio.Cluster.cluster',
['Bio/Cluster/clustermodule.c',
'Bio/Cluster/cluster.c'],
include_dirs=[numpy_include_dir, '/usr/local/lib64/python2.7/site-packages/numpy/core/include/'],
))
EXTENSIONS.append(
Extension('Bio.KDTree._CKDTree',
["Bio/KDTree/KDTree.c",
"Bio/KDTree/KDTreemodule.c"],
include_dirs=[numpy_include_dir, '/usr/local/lib64/python2.7/site-packages/numpy/core/include/'],
))
EXTENSIONS.append(
Extension('Bio.Motif._pwm',
["Bio/Motif/_pwm.c"],
include_dirs=[numpy_include_dir, '/usr/local/lib64/python2.7/site-packages/numpy/core/include/'],
))
然后我用pip从源代码安装(我把包含更新后的setup.py
文件的文件夹重新压缩了一下,然后运行了)
pip install recompressed.tar.gz
现在安装好了,可以正常使用了。
更新 我在另一台openSUSE机器上遇到了非常类似的问题,但这次没有任何包含文件……为了绕过这个问题,我从numpy的源代码中复制了这些文件,并通过上面的include_dirs更新把它们添加进来。