安装Quantlib Python PyQL库:似乎无法找到Boost

安装Quantlib Python PyQL库:似乎无法找到Boost,python,boost,quantlib,Python,Boost,Quantlib,我正在尝试安装包装Quantlib的Python PyQL库,但它似乎找不到一些boost头 我已经有了Quantlib(1.3)的最新版本,并位于/usr/local/lib目录中,还有Boost 1.5: xxx@LILJEN:/usr/local/lib$ ls boost boost_1_50_0 libQuantLib.a libQuantLib.la libQuantLib.so libQuantLib.so.0 libQuantLib.so.0.0.0 python2

我正在尝试安装包装Quantlib的Python PyQL库,但它似乎找不到一些boost头

我已经有了Quantlib(1.3)的最新版本,并位于/usr/local/lib目录中,还有Boost 1.5:

xxx@LILJEN:/usr/local/lib$ ls
boost  boost_1_50_0  libQuantLib.a  libQuantLib.la  libQuantLib.so  libQuantLib.so.0  libQuantLib.so.0.0.0  python2.7  python3.3  QuantLib-1.3  QuantLib-SWIG-1.3  R  site_ruby
我已安装Cython 0.2:

>>> pkg_resources.get_distribution("Cython").version
'0.20'
当我进入下载包的pyql目录并执行makebuild命令时,我发现Boost库有一个问题,否则它似乎是在正确地“Cythonizing”所有东西。我注意到Github的说明说我应该“修补”Cython 0.16,但是因为我已经在0.2上了,所以我认为这是没有必要的。以下是构建说明:

xxx@LILJEN:~/Downloads/pyql$ sudo make build
python setup.py build_ext --inplace
/usr/lib/python2.7/distutils/extension.py:133: UserWarning: Unknown Extension options: 'pyrex_directives'
  warnings.warn(msg)
missing cimport in module 'quantlib.time': quantlib/instruments/credit_default_swap.pyx
missing cimport in module 'quantlib.pricingengines': quantlib/instruments/credit_default_swap.pyx
missing cimport in module 'quantlib.pricingengines': quantlib/instruments/option.pyx
Compiling quantlib/quotes.pyx because it changed.
Compiling quantlib/interest_rate.pyx because it changed.
Compiling quantlib/time/calendar.pyx because it changed.
Compiling quantlib/time/schedule.pyx because it changed.
Compiling quantlib/time/date.pyx because it changed.
Compiling quantlib/time/daycounter.pyx because it changed.
Compiling quantlib/time/daycounters/actual_actual.pyx because it changed.
Compiling quantlib/time/daycounters/thirty360.pyx because it changed.
Compiling quantlib/time/calendars/germany.pyx because it changed.
Compiling quantlib/time/calendars/united_states.pyx because it changed.
Compiling quantlib/time/calendars/united_kingdom.pyx because it changed.
Compiling quantlib/time/calendars/null_calendar.pyx because it changed.
Compiling quantlib/time/calendars/jointcalendar.pyx because it changed.
Compiling quantlib/instruments/swap.pyx because it changed.
Compiling quantlib/pricingengines/credit.pyx because it changed.
Compiling quantlib/pricingengines/swap.pyx because it changed.
Compiling quantlib/pricingengines/bond.pyx because it changed.
Compiling quantlib/pricingengines/blackformula.pyx because it changed.
Compiling quantlib/pricingengines/engine.pyx because it changed.
Compiling quantlib/pricingengines/vanilla/mcvanillaengine.pyx because it changed.
Compiling quantlib/pricingengines/vanilla/vanilla.pyx because it changed.
Compiling quantlib/sim/simulate.pyx because it changed.
Compiling quantlib/processes/bates_process.pyx because it changed.
Compiling quantlib/processes/black_scholes_process.pyx because it changed.
Compiling quantlib/processes/heston_process.pyx because it changed.
Compiling quantlib/math/optimization.pyx because it changed.
Compiling quantlib/termstructures/default_term_structure.pyx because it changed.
Compiling quantlib/termstructures/credit/piecewise_default_curve.pyx because it changed.
Compiling quantlib/termstructures/credit/default_probability_helpers.pyx because it changed.
Compiling quantlib/termstructures/volatility/equityfx/black_vol_term_structure.pyx because it changed.
Compiling quantlib/termstructures/yields/yield_term_structure.pyx because it changed.
Compiling quantlib/termstructures/yields/zero_curve.pyx because it changed.
Compiling quantlib/termstructures/yields/piecewise_yield_curve.pyx because it changed.
Compiling quantlib/termstructures/yields/rate_helpers.pyx because it changed.
Compiling quantlib/termstructures/yields/flat_forward.pyx because it changed.
Compiling quantlib/models/equity/bates_model.pyx because it changed.
Compiling quantlib/models/equity/heston_model.pyx because it changed.
Cythonizing quantlib/instruments/swap.pyx
Cythonizing quantlib/interest_rate.pyx
Cythonizing quantlib/math/optimization.pyx
Cythonizing quantlib/models/equity/bates_model.pyx
Cythonizing quantlib/models/equity/heston_model.pyx
Cythonizing quantlib/pricingengines/blackformula.pyx
Cythonizing quantlib/pricingengines/bond.pyx
Cythonizing quantlib/pricingengines/credit.pyx
Cythonizing quantlib/pricingengines/engine.pyx
Cythonizing quantlib/pricingengines/swap.pyx
Cythonizing quantlib/pricingengines/vanilla/mcvanillaengine.pyx
Cythonizing quantlib/pricingengines/vanilla/vanilla.pyx
Cythonizing quantlib/processes/bates_process.pyx
Cythonizing quantlib/processes/black_scholes_process.pyx
Cythonizing quantlib/processes/heston_process.pyx
Cythonizing quantlib/quotes.pyx
Cythonizing quantlib/sim/simulate.pyx
Cythonizing quantlib/termstructures/credit/default_probability_helpers.pyx
Cythonizing quantlib/termstructures/credit/piecewise_default_curve.pyx
Cythonizing quantlib/termstructures/default_term_structure.pyx
Cythonizing quantlib/termstructures/volatility/equityfx/black_vol_term_structure.pyx
Cythonizing quantlib/termstructures/yields/flat_forward.pyx
Cythonizing quantlib/termstructures/yields/piecewise_yield_curve.pyx
Cythonizing quantlib/termstructures/yields/rate_helpers.pyx
Cythonizing quantlib/termstructures/yields/yield_term_structure.pyx
Cythonizing quantlib/termstructures/yields/zero_curve.pyx
Cythonizing quantlib/time/calendar.pyx
Cythonizing quantlib/time/calendars/germany.pyx
Cythonizing quantlib/time/calendars/jointcalendar.pyx
Cythonizing quantlib/time/calendars/null_calendar.pyx
Cythonizing quantlib/time/calendars/united_kingdom.pyx
Cythonizing quantlib/time/calendars/united_states.pyx
Cythonizing quantlib/time/date.pyx
Cythonizing quantlib/time/daycounter.pyx
Cythonizing quantlib/time/daycounters/actual_actual.pyx
Cythonizing quantlib/time/daycounters/thirty360.pyx
Cythonizing quantlib/time/schedule.pyx
running build_ext
building 'quantlib.cashflow' extension
creating build
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/quantlib
x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DHAVE_CONFIG_H -I/usr/local/include -I/usr/include -I. -I./cpp_layer -I/usr/include/python2.7 -c quantlib/cashflow.cpp -o build/temp.linux-x86_64-2.7/quantlib/cashflow.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default]
quantlib/cashflow.cpp:342:32: fatal error: boost/shared_ptr.hpp: No such file or directory
 #include "boost/shared_ptr.hpp"
                                ^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
make: *** [build] Error 1
它似乎找不到boost库,尽管它显然已经安装并运行,因为我从零开始成功编译了Quantlib,并且测试套件正常工作。有没有关于我哪里出了问题的提示

它是Ubuntu 13.10和默认安装的Python 2.7。本质上,这是一个新安装的系统,包含所有最新的库(Boost除外,我保持在1.5)

Fwiw python setup.py安装也不起作用,但我有一个常规的SWIG Quantlib库,它在python中运行良好


附录


我相信我的“错误”在于我密切关注如何在Ubuntu上安装Quantlib。该页面在usr/local/lib目录中讨论Boost,我复制并粘贴了它的命令。Quantlib编译得非常完美,因为Boost目录是根据页面通过export命令进行通信的,但是pyql还需要在setup.py中指定此目录。这是一个确保sys.platform=“linux2”下的行指定INCLUDE_DIRS to usr/local/lib而不是默认的usr/local/INCLUDE的问题。我写这篇补遗是因为我相信很多用户可能也会在谷歌搜索“InstallQuantlibUbuntu”并找到这个页面,因此这个问题可能会再次出现在很多人身上

如果查看启动编译器的命令行,您将看到

-I/usr/local/include -I/usr/include -I. -I./cpp_layer -I/usr/include/python2.7
哪些是指示编译器在何处查找头的标志。您的Boost头不在其中任何一个中(这很奇怪:头通常位于/usr/local/include中的某个位置。您是否自己在/usr/local/lib中复制了它们?),因此编译器找不到它们

您可以:

  • 将boost目录移动到/usr/local/include中(即名为“boost”的目录,而不是名为“boost_1_50_0”)或
  • 将附加标志
    -I/usr/local/lib/boost\u 1\u 50\u 0
    传递给编译器,以便它可以在当前位置找到它们。执行此操作的方法将取决于setup.py脚本

您的增压头在哪里?它们是在/usr/local/include中还是在其他地方?我在/usr/local/lib中看到它们。不管怎么说,我看到了boost\u 1\u 50\u 0目录,在下面我看到了一个名为boost的目录。我想这是增压头?您可以在我问题的顶部看到my/usr/local/lib文件夹的内容。例如,在/usr/local/lib/boost\u 1\u 50\u 0/boost中是否有一个文件
shared\u ptr.hpp
?这就是编译器正在寻找的。确实有:。。。。。。xxx@LILJEN:/usr/local/lib/boost_1_50_0/boost$ls sh*…共享_array.hpp共享_container_iterator.hpp共享_ptr.hpp。。。。。。。。我是否需要编辑setup.py以允许它找到它?我使用的是pyql github中的默认setup.py。它似乎有各种操作系统的默认位置,而对于debian,它似乎建议事情应该保持不变,但也许我需要更改这些位置?也许我应该从我试图构建pyql的地方重新定位?我目前正在我的主目录下的一个名为pyql的目录中执行此操作,而boost位于usr/local/lib?Success!setup.py文件将INCLUDE_DIRS设置为/usr/local/INCLUDE,将LIBRARY_DIRS设置为usr/local/lib。由于对linux相当陌生,我认为如果库DIRS是正确的,那么它会以某种方式工作。将setup.py编辑到正确的目录可以看到整个工作正常,测试套件正常工作。然而,还有一个问题:我如何包括这个新事物?导入pyql或导入pyql没有看到任何内容。也就是说,我知道它在工作,因为sudo使测试工作得非常完美。忽略前面评论中的最后一行。所有示例都正常工作。它以“quantlib”的形式导入,并且工作正常。我很困惑,因为SWIG版本也是这样导入的(可能是大写的Q,我不记得了)。一切都很好,工作得很好。