我正在尝试在 Conda 环境中针对mariadb-connector-c编译python-mysqlclient 。这意味着安装前缀不是但是,例如,。我也想用插件。/usr/local
$HOME/conda/envs/test
auth_gssapi_client.so
两个包都构建,但import MySQLdb
引发以下异常:
Traceback (most recent call last):
File "/opt/emsconda/conda-bld/env/test_tmp/run_test.py", line 2, in <module>
import MySQLdb
File "/opt/emsconda/conda-bld/env/lib/python3.6/site-packages/MySQLdb/__init__.py", line 19, in <module>
import _mysql
ImportError: libmariadb.so.3: cannot open shared object file: No such file or directory
这样做的原因是mysqlclient只搜索lib/
,但
lib/mariadb
即使它配置了正确的路径并成功构建也不搜索。*.so
我可以通过将文件复制到(或通过创建符号链接)来解决这个问题lib/
,但是,它找不到 GSSAPI 插件......</p>
我以这种方式构建mariadb-connector-c 3.0.2:
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_BUILD_TYPE=Release ..
make
make install
我可以安装它并运行mariadb_config
它给出这个输出:
Copyright 2011-2015 MariaDB Corporation AB
Get compiler flags for using the MariaDB Connector/C.
Usage: /opt/emsconda/conda-bld/mysqlclient_1510048680472/_h_env/bin/mariadb_config [OPTIONS]
--cflags [-I/opt/emsconda/conda-bld/env/include/mariadb -I/opt/emsconda/conda-bld/env/include/mariadb/mysql]
--include [-I/opt/emsconda/conda-bld/env/include/mariadb -I/opt/emsconda/conda-bld/env/include/mariadb/mysql]
--libs [-L/opt/emsconda/conda-bld/env/lib/mariadb/ -lmariadb -lpthread -ldl -lm -lssl -lcrypto]
--libs_r [-L/opt/emsconda/conda-bld/env/lib/mariadb/ -lmariadb -lpthread -ldl -lm -lssl -lcrypto]
--libs_sys [-lpthread -ldl -lm -lssl -lcrypto]
--version [10.2.6]
--socket [/tmp/mysql.sock]
--port [3306]
--plugindir [/opt/emsconda/conda-bld/env/lib/mariadb/plugin]
--tlsinfo [OpenSSL 1.0.2k]
然后我以这种方式构建python-mysqlclient 1.3.12:
MYSQL_CONFIG="$PREFIX/bin/mariadb_config"
echo "mysql_config = $PREFIX/bin/mariadb_config" >> site.cfg
$PYTHON -m pip install -I --no-deps .
这个问题有两种可能的解决方案:
配置mariadb-connector-c直接把它的东西放进去
lib/
——我还没有找到关于如何做到这一点的文档。让python-mysqlclient尊重
mariadb_config
返回的路径——如何?