【问题标题】:Changing Biopython include path for compilation during pip installation在 pip 安装期间更改 Biopython 包含编译路径
【发布时间】:2013-01-14 16:54:09
【问题描述】:

我正在尝试在我的工作机器 (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

目录安装顺利。

【问题讨论】:

  • 我认为 biopython 的打包是错误的,因为它没有尝试 import numpy 并检查 numpy.__file__ 我建议打开一个错误报告。
  • 我的系统也可能设置错误 - 我的 numpy.__file__ 指向 '/usr/lib64/python2.7/site-packages/numpy/'
  • 您是否尝试过section 8 中提到的本地安装?我刚刚在我的本地机器上做了一个 pip install --user biopython ,它工作得很好。当然在第 8 节中不是 pip 安装。
  • 可以让pip只下载,在setup.py中修改路径,然后手动安装。
  • 或者,您可以复制或链接相关文件,以便 pip 可以找到它们。

标签: python numpy include pip biopython


【解决方案1】:

感谢@Bort,我发现这显然是known error(本地/用户空间安装无论如何都不起作用)。

通过在以下位置编辑 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 更新将它们提供给它们。

【讨论】:

  • 只是ooc,如果您执行导入numpy,打印numpy.__file__ 和打印numpy.get_include(),它们是否指向您机器上的不同目录?我希望您知道broken BLAS、numpy 和 scipy 在 open_suse 中的使用情况。
  • numpy.__file__ = /usr/lib64/python2.7/site-packages/numpy/__init__.pyc, numpy.get_include() = /usr/lib64/python2.7/site-packages/ numpy/核心/包括。我 4 天前开始使用 OpenSuse(在使用 Ubuntu 多年之后),但没有。感谢您的提醒。
  • 所以现在这很令人困惑,您导入的 numpy 与您构建 biopython 所针对的不同....您应该调查一下。由于无法更改整个部门,我仍然坚持使用 suse。但是,我们只使用我们自己的构建。
  • 因此导入的 numpy 文件夹缺少任何 .h 包含文件,这些文件似乎都在 /usr/local/... 目录而不是 /usr/lib64/... 目录中我不确定这是否是故意的(/usr/lib64/python2.7/site-packages/numpy/core/include/numpy 文件夹实际上只有两个 .txt 文件,仅此而已。
猜你喜欢
  • 2017-05-29
  • 2023-03-27
  • 2017-01-19
  • 2015-08-19
  • 1970-01-01
  • 2021-03-17
  • 2012-05-14
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多