无Root权限CentOS7主机上Django用pyodbc连SQL Server报错求助
解决pyodbc找不到libodbc.so.2的问题
核心思路
不用修改pyodbc包本身,通过指定环境变量或重新编译pyodbc让它识别你在/web/.local安装的unixODBC。
方法一:设置LD_LIBRARY_PATH环境变量
pyodbc加载动态库时会读取这个变量,把你安装的unixODBC的lib路径加入进去:
- 先确认unixODBC的lib路径:
通常在/web/.local/lib或/web/.local/lib64(CentOS7 64位系统优先检查lib64)。可以用find /web/.local -name libodbc.so.2命令定位准确路径。 - 临时生效(当前终端会话):
执行后直接运行Python导入pyodbc测试。export LD_LIBRARY_PATH=/web/.local/lib64:$LD_LIBRARY_PATH - 永久生效(每次登录自动加载):
编辑~/.bashrc或~/.profile文件,加入上面的export命令,然后执行:source ~/.bashrc
方法二:重新编译pyodbc并指定unixODBC路径
如果方法一无效,说明pyodbc编译时绑定了系统的unixODBC路径,需要重新编译并关联你的本地安装:
- 卸载现有pyodbc:
pip uninstall -y pyodbc - 用pip编译安装时指定unixODBC的头文件和库路径:
这里的CFLAGS="-I/web/.local/include" LDFLAGS="-L/web/.local/lib64" pip install pyodbc --no-binary :all:CFLAGS指定unixODBC的头文件目录,LDFLAGS指定库文件目录,--no-binary :all:强制pip从源码编译,而不是用预编译包。
针对Django运行的补充
如果是通过uwsgi/gunicorn启动Django,需要在启动配置中加入环境变量:
- 比如uwsgi的ini配置文件中添加:
env = LD_LIBRARY_PATH=/web/.local/lib64:$LD_LIBRARY_PATH - 或者在启动脚本开头先执行export命令,再启动服务。
内容的提问来源于stack exchange,提问作者ExplainPark_Korea
相关产品推荐
相关产品推荐

