Ошибка установки Quantlib / Quantlib SWIG: неопределенный символ - PullRequest
0 голосов
/ 12 апреля 2020

Интересно, если вы можете мне помочь.

Я пытаюсь установить Anaconda / Boost / Quantlib для подтверждения концепции финансового рынка (определение потенциального форвардного риска контрагента с помощью Spark).

Я использую AWS EC2 Linux 2 (x86 - 64 бит) экземпляр.

Я столкнулся с ошибкой импорта при попытке загрузить модуль QuantLib в Python ( _QuantLib. cpython -37m-x86_64- linux -gnu.so: неопределенный символ: _ZTIN8QuantLib5EventE), для которого не удается найти решение.

Пожалуйста, дайте мне знать, какая дополнительная информация необходима для диагностики проблемы. С нетерпением жду Вашего ответа.

ВЫХОДЫ ИЗ УСТАНОВКИ

Я могу успешно скомпилировать и запустить файлы Quantlib в каталоге «Примеры», например, CDS, Bermudianswaption.

Однако я не могу импортировать Quantlib в Python:

$ python
Python 3.7.6 (default, Jan  8 2020, 19:59:22) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> import QuantLib as qltest
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/anaconda/lib/python3.7/site-packages/QuantLib-1.18-py3.7-linux-x86_64.egg/QuantLib/__init__.py", line 21, in <module>
    from .QuantLib import *
  File "/usr/local/anaconda/lib/python3.7/site-packages/QuantLib-1.18-py3.7-linux-x86_64.egg/QuantLib/QuantLib.py", line 13, in <module>
    from . import _QuantLib
ImportError: /usr/local/anaconda/lib/python3.7/site-packages/QuantLib-1.18-py3.7-linux-x86_64.egg/QuantLib/_QuantLib.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZTIN8QuantLib5EventE

ТАКЖЕ

$ make -C Python check
make: Entering directory `/usr/local/QuantLib-SWIG-1.18/Python'
make  check-am
make[1]: Entering directory `/usr/local/QuantLib-SWIG-1.18/Python'
make  check-local
make[2]: Entering directory `/usr/local/QuantLib-SWIG-1.18/Python'
/usr/local/anaconda/bin/python3 setup.py test
running test
running build
running build_py
running build_ext
Traceback (most recent call last):
  File "setup.py", line 258, in <module>
    'build_ext': my_build_ext
  File "/usr/local/anaconda/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup
    return distutils.core.setup(**attrs)
  File "/usr/local/anaconda/lib/python3.7/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/local/anaconda/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/usr/local/anaconda/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "setup.py", line 61, in run
    module = __import__('QuantLibTestSuite', globals(), locals(), [''])
  File "test/QuantLibTestSuite.py", line 22, in <module>
    from date import DateTest
  File "test/date.py", line 18, in <module>
    import QuantLib as ql
  File "build/lib.linux-x86_64-3.7/QuantLib/__init__.py", line 21, in <module>
    from .QuantLib import *
  File "build/lib.linux-x86_64-3.7/QuantLib/QuantLib.py", line 13, in <module>
    from . import _QuantLib
ImportError: build/lib.linux-x86_64-3.7/QuantLib/_QuantLib.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZTIN8QuantLib5EventE
make[2]: *** [check-local] Error 1
make[2]: Leaving directory `/usr/local/QuantLib-SWIG-1.18/Python'
make[1]: *** [check-am] Error 2
make[1]: Leaving directory `/usr/local/QuantLib-SWIG-1.18/Python'
make: *** [check] Error 2
make: Leaving directory `/usr/local/QuantLib-SWIG-1.18/Python'

Поиск файла "_QuantLib. cpython -37m-x86_64- linux -gnu.so"

$ find $INSTDR -name "_QuantLib.cpython-37m-x86_64-linux-gnu.so"
find: ‘/usr/local/anaconda/pkgs/icu-58.2-h9c2bf20_1ph42j7q7’: Permission denied
find: ‘/usr/local/anaconda/pkgs/ripgrep-11.0.2-he32d670_06p46vhyz’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pixman-0.38.0-h7b6447c_0a7myldqs’: Permission denied
find: ‘/usr/local/anaconda/pkgs/tbb-2020.0-hfd86e86_0fmjulrel’: Permission denied
find: ‘/usr/local/anaconda/pkgs/libpng-1.6.37-hbc83047_0wh03l3az’: Permission denied
find: ‘/usr/local/anaconda/pkgs/libarchive-3.3.3-h5d8350f_54umdx6o2’: Permission denied
find: ‘/usr/local/anaconda/pkgs/gst-plugins-base-1.14.0-hbbd80ab_1e237j2he’: Permission denied
find: ‘/usr/local/anaconda/pkgs/libcurl-7.68.0-h20c2e04_0d3m8rr6e’: Permission denied
find: ‘/usr/local/anaconda/pkgs/certifi-2019.11.28-py37_05cjaenhv’: Permission denied
find: ‘/usr/local/anaconda/pkgs/click-7.0-py37_05b4u3zsi’: Permission denied
find: ‘/usr/local/anaconda/pkgs/et_xmlfile-1.0.1-py37_0zrtyauo5’: Permission denied
find: ‘/usr/local/anaconda/pkgs/future-0.18.2-py37_0x1x6cen6’: Permission denied
find: ‘/usr/local/anaconda/pkgs/lazy-object-proxy-1.4.3-py37h7b6447c_0ny0pvzan’: Permission denied
find: ‘/usr/local/anaconda/pkgs/parso-0.5.2-py_0u6bbsyp3’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pycparser-2.19-py37_0z16oimgg’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pyflakes-2.1.1-py37_0zp3n9i0_’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pyyaml-5.3-py37h7b6447c_01zilcxsm’: Permission denied
find: ‘/usr/local/anaconda/pkgs/send2trash-1.5.0-py37_0a2hxzxjb’: Permission denied
find: ‘/usr/local/anaconda/pkgs/sip-4.19.8-py37hf484d3e_07obpk_qa’: Permission denied
find: ‘/usr/local/anaconda/pkgs/babel-2.8.0-py_03jei626g’: Permission denied
find: ‘/usr/local/anaconda/pkgs/tblib-1.6.0-py_0v3w_thw2’: Permission denied
find: ‘/usr/local/anaconda/pkgs/webencodings-0.5.1-py37_1cjp3cx92’: Permission denied
find: ‘/usr/local/anaconda/pkgs/conda-package-handling-1.6.0-py37h7b6447c_0qgg0icqp’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pexpect-4.8.0-py37_0s4xg5ur2’: Permission denied
find: ‘/usr/local/anaconda/pkgs/urllib3-1.25.8-py37_0ojk2cyug’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pillow-7.0.0-py37hb39fc2d_0867pyldz’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pytest-astropy-header-0.1.2-py_039nzmu42’: Permission denied
find: ‘/usr/local/anaconda/pkgs/sortedcollections-1.1.2-py37_09te1cwym’: Permission denied
find: ‘/usr/local/anaconda/pkgs/terminado-0.8.3-py37_0tc7r30ss’: Permission denied
find: ‘/usr/local/anaconda/pkgs/cryptography-2.8-py37h1ba5d50_0e7nuxg6u’: Permission denied
find: ‘/usr/local/anaconda/pkgs/gevent-1.4.0-py37h7b6447c_0ag9sn_p9’: Permission denied
find: ‘/usr/local/anaconda/pkgs/jupyter_core-4.6.1-py37_0a0mue74k’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pluggy-0.13.1-py37_0925z4h39’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pylint-2.4.4-py37_0weoibz7j’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pytest-5.3.5-py37_0p57f7clq’: Permission denied
find: ‘/usr/local/anaconda/pkgs/python-language-server-0.31.7-py37_04p4v4ww1’: Permission denied
find: ‘/usr/local/anaconda/pkgs/notebook-6.0.3-py37_05jofqe58’: Permission denied
find: ‘/usr/local/anaconda/pkgs/conda-build-3.18.11-py37_0zcg8k_lz’: Permission denied
find: ‘/usr/local/anaconda/pkgs/spyder-4.0.1-py37_0j3p1_0kd’: Permission denied
find: ‘/usr/local/anaconda/pkgs/_ipyw_jlab_nb_ext_conf-0.1.0-py37_03t4jfgzn’: Permission denied
find: ‘/usr/local/anaconda/pkgs/matplotlib-base-3.1.3-py37hef1b27d_0ugcrx9f5’: Permission denied
find: ‘/usr/local/anaconda/pkgs/pytest-arraydiff-0.3-py37h39e3cac_0k5do34h7’: Permission denied
/usr/local/anaconda/lib/python3.7/site-packages/QuantLib-1.18-py3.7-linux-x86_64.egg/QuantLib/_QuantLib.cpython-37m-x86_64-linux-gnu.so
/usr/local/QuantLib-SWIG-1.18/Python/build/lib.linux-x86_64-3.7/QuantLib/_QuantLib.cpython-37m-x86_64-linux-gnu.so

КОМАНДЫ УСТАНОВКИ

# install packages to /usr/local

INSTDR=/usr/local
cd $INSTDR

# ----------------------------------------------------------------------
#              Install Dev Tools to Compile Packages         
# ----------------------------------------------------------------------

sudo yum groupinstall -y "Development Tools"

# ----------------------------------------------------------------------
#              Install Anaconda             
# ----------------------------------------------------------------------


# Install Dependencies
sudo yum install -y libXcomposite libXcursor libXi libXtst libXrandr alsa-lib mesa-libEGL libXdamage mesa-libGL libXScrnSaver

# Download Anaconda
sudo wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh

# adjust to latest version as needed

# Run Anaconda Shell
sudo bash ./Anaconda3-2020.02-Linux-x86_64.sh -b -p $INSTDR/anaconda

# "Delete Anaconda Shell"
sudo rm Anaconda3-2020.02-Linux-x86_64.sh

# "Set Anaconda Paths"
export PATH=$INSTDR/anaconda/bin:$PATH

# test with "conda list"

# ----------------------------------------------------------------------
#              Install Boost 
# ----------------------------------------------------------------------


# Download
# get latest version from https://www.boost.org/

sudo wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz

# Extract

sudo tar -xvf boost_1_72_0.tar.gz

# Remove tarball

sudo rm boost_1_72_0.tar.gz

# Prepare

cd boost_1_72_0

sudo bash ./bootstrap.sh — with-python=python3 — with-libraries=python — prefix=/usr

# Build

sudo ./b2

# Install

sudo ./b2 install

# Vars

export BOOST_INCLUDEDIR=$INSTDR/boost_1_72_0
export BOOST_ROOT=$INSTDR/boost_1_72_0
export BOOST_LIBRARYDIR=$INSTDR/boost_1_72_0/stage/lib

cd ../

# ----------------------------------------------------------------------
#              Install QuantLib
# ----------------------------------------------------------------------


# Install QuantLib dependencies

sudo yum install -y graphviz emacs texlive boost-devel

# download

sudo wget https://XXX.s3-ap-southeast-2.amazonaws.com/QuantLib-1.18.tar.gz

# Unpack QuantLib
sudo tar xzf QuantLib-1.18.tar.gz

# Prepare

cd QuantLib-1.18

sudo ./configure --with-boost-include=$INSTDR/include/ --with-boost-lib=$INSTDR/lib/ --disable-shared --enable-static

# Make

sudo make

#Install

sudo make install
sudo ldconfig

# Remove tarball

cd ../
sudo rm QuantLib-1.18.tar.gz

# test the QL installation at this point
# cd QuantLib-1.18/Examples/BermudanSwaption
#  g++ BermudanSwaption.cpp -o BermudanSwaption -lQuantLib
#  ./BermudanSwaption
g++ CDS.cpp -o CDS1 -lQuantLib

# Vars

LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
export PATH=$INSTDR/QuantLib-1.18:$PATH

sudo ldconfig


# ----------------------------------------------------------------------
#              Install QuantLib-SWIG
# ----------------------------------------------------------------------

#Download
# download released QuantLib-SWIG versions from Bintray at https://bintray.com/quantlib/releases/QuantLib-SWIG.

sudo wget https://XXX.s3-ap-southeast-2.amazonaws.com/QuantLib-SWIG-1.18.tar.gz

#Unpack

sudo tar xzf QuantLib-SWIG-1.18.tar.gz

#Configure

cd QuantLib-SWIG-1.18

sudo ./configure PYTHON=$INSTDR/anaconda/bin/python3

# Make

sudo make -C Python

# Install

sudo make -C Python install

# also tried
# cd Python
#  sudo /usr/local/anaconda/bin/python3 setup.py install

# make -C Python check

#Clean up

cd ../
sudo rm QuantLib-SWIG-1.18.tar.gz


# ----------------------------------------------------------------------
#                    Install Additional Packages              
# ----------------------------------------------------------------------

conda install -y pandas 
conda install -y matplotlib

# ----------------------------------------------------------------------
#                        Environment vars          
# ----------------------------------------------------------------------

echo "Set Environment vars"
export PYSPARK_DRIVER_PYTHON=$INSTDR/anaconda/bin/python3
export PYSPARK_PYTHON=$INSTDR/anaconda/bin/python3
export PYTHONPATH=$INSTDR/anaconda/bin/python3
sudo ldconfig


# ----------------------------------------------------------------------
#                         Security Update            
# ----------------------------------------------------------------------

sudo yum -y update


**ENVIRONMENTAL VARS**

[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $PATH
/usr/local/anaconda/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/include:/usr/lib
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $BOOST_INCLUDEDIR
/usr/local/boost_1_72_0
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $BOOST_ROOT
/usr/local/boost_1_72_0
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $BOOST_LIBRARYDIR
/usr/local/boost_1_72_0/stage/lib
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $LD_LIBRARY_PATH
/usr/local/lib
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $PYSPARK_DRIVER_PYTHON
/usr/local/anaconda/bin/python3
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $PYSPARK_PYTHON
/usr/local/anaconda/bin/python3
[ec2-user@ip-172-31-5-229 QuantLib-SWIG-1.18]$ echo $PYTHONPATH
/usr/local/anaconda/bin/python3

БИБЛИОТЕКИ КОНФИГУРАЦИИ QUANTLIB

$ quantlib-config --libs
-L/usr/local/lib -L/usr/local/lib -lQuantLib

Заранее благодарим за помощь. : -)

...