【问题标题】:How can I add header include dirs when installing pip packages?安装 pip 包时如何添加标头包含目录?
【发布时间】:2017-05-21 00:08:01
【问题描述】:

我在一个我没有权限的集群上,我正在尝试pip install mpi4py。由于我无法安装python3-devel 包,所以我下载了它并将其放在~/.local/ 中。不管这是否有成功的机会,以下让我感到困惑。

如果我只是运行pip3.4 install --user mpi4py,我会遇到这个错误:

/opt/sgi/mpt/mpt-2.14/bin/mpicc -pthread -Wno-unused-result -Werror=declaration-after-statement -DNDEBUG -fmessage-length=0 -grecord-gcc-switches -fstack-protector -O2 -Wall -D_FORTIFY_SOURCE=2 -funwind-tables -fasynchronous-unwind-tables -g -DOPENSSL_LOAD_CONF -fPIC -DHAVE_CONFIG_H=1 -DHAVE_DLFCN_H=1 -DHAVE_DLOPEN=1 -I~/.local/include/python3.4m/ -I/usr/include/python3.4m -c src/MPI.c -o build/temp.linux-x86_64-3.4/src/MPI.o
In file included from src/MPI.c:4:0:
src/mpi4py.MPI.c:4:20: fatal error: Python.h: No such file or directory
 #include "Python.h"

所以我想我需要通知pip 这个标题的位置。我试着这样做

pip3.4 install --user --global-option=build_ext --global-option="-I~/.local/include/python3.4m/" mpi4py

但我仍然收到相同的错误 (??)。我还尝试在没有全局选项的命令前添加 CPATH=$CPATH:~/.local/include/python3.4m 前缀,但无济于事。

pip 怎么会直接忽略包含路径?

服务器是某种 Suse Linux Enterprise。

更新:我发现路径必须是绝对的,但在链接阶段出现同样的问题:

ls ~/.local/lib64/
libpython3.4m.so  libpython3.so  pkgconfig

所以我将--global-option="-L$HOME/.local/lib64/" 添加到pip 命令中,然后:

 /opt/sgi/mpt/mpt-2.14/bin/mpicc -pthread _configtest.o -L/home/student/n/name/.local/lib64/ -Lbuild/temp.linux-x86_64-3.4 -lpython3.4m -o _configtest
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: cannot find -lpython3.4m
    collect2: error: ld returned 1 exit status
    failure.
    removing: _configtest.c _configtest.o
    error: Cannot link MPI programs. Check your configuration!!!

    ----------------------------------------

所以添加了库路径,-l<libname> 匹配但它没有链接。看来,libpython3.4m.so 实际上是我找不到的libpython3.4m.so.1.0 的符号链接。也许这就是问题所在,因为我手动安装python3-devel 并没有安装一些依赖项。

【问题讨论】:

    标签: python compiler-errors pip environment-variables mpi


    【解决方案1】:

    事实证明,作为全局选项传递的路径必须是绝对路径,因此必须将~ 替换为主目录的完整路径。

    然而,出现了第二个问题,因为libpython3.4m.so 实际上是一个符号链接,而我手动安装的 rpm 包python3-devel 中没有包含原始符号链接。因此有必要获得libpython3.4m.so.1.0 形式,例如https://rpmfind.net/linux/rpm2html/search.php?query=libpython3.4m.so.1.0()(64bit) 并将其放在与链接相同的目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 2016-04-09
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多