让PIP使用外部的include和lib路径

平时我们使用一些第三方的包管理器(主要是Mac上的Homebrew),常常导致类路径不会添加到默认路径中。

在PIP编译的时候,可能需要一些其他库文件和头文件等。虽然这些软件包已经装上了,但是PIP在安装的时候并没有能够很好地定位到它们的位置(因为通常不会装在默认系统路径下,而是在诸如/usr/local/include等这样的路径下)。这就会导致PIP找不到相应的头文件和库文件。

好在PIP提供了一个“--global-option”参数,它可以调用一个外部程序并且传递相应的参数。这个功能结合上"build_ext"程序就能解决上述的需求。

不过这个buildext到底是啥我也不清楚,甚至这都不是一个可执行的程序。不知道这是pip的一部分?还是gcc的一部分,反正从谷到的结果来看是好使的。从网上找到的一份buildext的help:

Options for 'build_ext' command:  
  --build-lib (-b)     directory for compiled extension modules
  --build-temp (-t)    directory for temporary files (build by-products)
  --plat-name (-p)     platform name to cross-compile for, if supported
                       (default: linux-x86_64)
  --inplace (-i)       ignore build-lib and put compiled extensions into the
                       source directory alongside your pure Python modules
  --include-dirs (-I)  list of directories to search for header files
                       (separated by ':')
  --define (-D)        C preprocessor macros to define
  --undef (-U)         C preprocessor macros to undefine
  --libraries (-l)     external C libraries to link with
  --library-dirs (-L)  directories to search for external C libraries
                       (separated by ':')
  --rpath (-R)         directories to search for shared C libraries at runtime
  --link-objects (-O)  extra explicit link objects to include in the link
  --debug (-g)         compile/link with debugging information
  --force (-f)         forcibly build everything (ignore file timestamps)
  --compiler (-c)      specify the compiler type
  --swig-cpp           make SWIG create C++ files (default is C)
  --swig-opts          list of SWIG command line options
  --swig               path to the SWIG executable
  --user               add user include, library and rpath
  --help-compiler      list available compilers

常用的就是-I(i)和-L(l)了。例如我们可以这么用(以安装pysndfile为例,它依赖libsndfile):

sudo pip install --global-option=build_ext --global-option="-I/usr/local/include" --global-option="-L/usr/local/lib" pysndfile  

差不多就这样了。。这个问题在一些折腾的比较乱的电脑上挺常见的。。。存档备份一下……

Friskit

继续阅读此作者的更多文章