在pip安装时更改Biopython编译的包含路径

3 投票
1 回答
1011 浏览
提问于 2025-04-17 13:13

我在我的工作电脑上(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更新把它们添加进来。

撰写回答