运维笔记--Debian/Ubuntu系统离线安装pymssql,连接SqlServer
场景描述:
开始之前,先对Debian和Ubuntu操作系统做个了解,两者都是Linux阵营中很有影响力的发行版本,可以简单理解成“Ubuntu源自Debian,两者系统操作命令基本相同,相比Ubuntu,Debian更加稳定。”
ubuntu和debian的版本对应关系:参考
From 10.04 up to 19.04:
Ubuntu-版本&代号 Debian-代号&版本
19.04 disco buster / sid - 10
18.10 cosmic buster / sid
18.04 bionic buster / sid
17.10 artful stretch / sid - 9
17.04 zesty stretch / sid
16.10 yakkety stretch / sid
16.04 xenial stretch / sid
15.10 wily jessie / sid - 8
15.04 vivid jessie / sid
14.10 utopic jessie / sid
14.04 trusty jessie / sid
13.10 saucy wheezy / sid - 7
13.04 raring wheezy / sid
12.10 quantal wheezy / sid
12.04 precise wheezy / sid
11.10 oneiric wheezy / sid
11.04 natty squeeze / sid - 6
10.10 maverick squeeze / sid
10.04 lucid squeeze / sid
回到我们主题,安装python环境下操作SqlServer的包pymssql;「pymssql官方文档」
联网环境的话,如果已安装pip,直接执行pip install pymssql就可以!一条命令搞定。
如果离线环境安装的话,就有点复杂了:
首先确认我们的系统版本:
root@9deba54adab7:/# cat /etc/debian_version
8.11
root@9deba54adab7:/# uname -a
Linux 9deba54adab7 4.4.0-105-generic #128-Ubuntu SMP Thu Dec 14 12:42:11 UTC 2017 x86_64 GNU/Linux
root@9deba54adab7:/# more /etc/issue
Debian GNU/Linux 8 \n \l
大概心里有个印象,当前我们系统版本为Debian 8,大体对应ubuntu的14.04。
接下来,我们先按照正常的安装步骤走一遍:
(1) 首先下载pymssql离线安装源码包--注意包版本号,以及支持的python版本:https://pypi.org/project/pymssql/2.1.4/
帮人帮到底:点击 Dowload files (PS: 小伙伴们注意下,这个版本的包可能装不上,这里只是提供给想要测试我遇到的安装问题的版本)


下载并上传到服务器本地之后,解压pymssql-2.1.4.tar.gz,然后进入解压后的目录,执行:
python setup.py build
python setup.py install
(上边两条命令,执行的前提是系统已安装了setuptools包:https://pypi.org/project/setuptools/#downloads)
执行python setup.py build的时候出现如下异常:
Traceback (most recent call last):
File "setup.py", line 88, in <module>
from Cython.Distutils import build_ext as _build_ext
File "/mnt/tt_package/pymssql-2.1.4/Cython-0.29.13-py2.7-linux-x86_64.egg/Cython/Distutils/__init__.py", line 1, in <module>
from Cython.Distutils.build_ext import build_ext
File "/mnt/tt_package/pymssql-2.1.4/Cython-0.29.13-py2.7-linux-x86_64.egg/Cython/Distutils/build_ext.py", line 5, in <module>
from setuptools.command.build_ext import build_ext as _build_ext
File "/usr/lib/python2.7/dist-packages/setuptools/command/build_ext.py", line 50, in <module>
class build_ext(_build_ext):
TypeError: Error when calling the metaclass bases
str() takes at most 1 argument (3 given)
基于上述异常,网络查找资料,WTF,资料少的可怜,难道跟Linux下用某软sqlserver的用户少有关么?!找了半天,无果!
中途尝试了其他安装python包的方式,如:dpkg的方式安装.deb包,https://pkgs.org/download/pymssql

将上述包,下载下来后执行安装:
dpkg -i python-pymssql_1.0.2+dfsg-1+b3_amd64.deb
结果~ 结果~!报了一堆依赖问题,擦汗!来来来,顺便提供个下载debian依赖包的地址:https://packages.debian.org/buster/libsybdb5
学了一遍,ubuntu下如何搜集依赖及解决依赖问题:
https://www.youcl.com/info/5946
https://blog.csdn.net/junbujianwpl/article/details/52811153
最后,最后还是无果!
***********************************************************************************
分割线之后,休息一下,中午吃个饭,一直寻思到底啥问题,甚至有了放弃的念头,实在不行,写个Django接口服务,也是一种思路提供参考!
即:在可以联网的机器上用Docker装好pymssql环境,用Django起个服务,跟当前需要访问sqlserver的程序部署在同一台服务器上,通过调用接口来实现间接访问sqlserver数据库。
PS:这块功能已实现,回头梳理下整理出来。
***********************************************************************************
还是不甘心,怎么办?怎么办?难道我们安装的版本出了问题么?
更换版本试下;pymssql-2.1.1.tar.gz

按照第一次的安装步骤,上传解压,执行python setup.py install;出现异常:
root@2bb33e0d50af:/mnt/tt_package/pymssql-2.1.1# python setup.py install
setup.py: platform.system() => 'Linux'
setup.py: platform.architecture() => ('64bit', '')
setup.py: platform.linux_distribution() => ('debian', '8.11', '')
setup.py: platform.libc_ver() => ('glibc', '2.4')
setup.py: Not using bundled FreeTDS
setup.py: include_dirs = ['/usr/local/include']
setup.py: library_dirs = ['/usr/local/lib'] Installed /mnt/tt_package/pymssql-2.1.1/setuptools_git-1.2-py2.7.egg
running install
running bdist_egg
running egg_info
writing pymssql.egg-info/PKG-INFO
writing top-level names to pymssql.egg-info/top_level.txt
writing dependency_links to pymssql.egg-info/dependency_links.txt
reading manifest file 'pymssql.egg-info/SOURCES.txt'
writing manifest file 'pymssql.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_ext
building '_mssql' extension
creating build
creating build/temp.linux-x86_64-2.7
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/local/include -I/usr/include/python2.7 -c _mssql.c -o build/temp.linux-x86_64-2.7/_mssql.o -DMSDBLIB
_mssql.c:314:22: fatal error: sqlfront.h: No such file or directory
#include "sqlfront.h"
^
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
出现了新的错误,网上根据错误关键字查找,
找到如下靠谱参考:
https://blog.csdn.net/u012965373/article/details/52759391
https://blog.csdn.net/Mr0Yang/article/details/52351595
https://blog.51cto.com/linuxshow/1407255
https://www.cnblogs.com/dbcloud/p/6397270.html
里边基本上都提到了,系统缺少包:freetds,会导致安装pymssql的时候,出现异常:error: command 'gcc' failed with exit status 1
OK!
我们接着继续安装缺少的包:freetds,上边几篇参考博客中基本附了下载地址:http://mirrors.ibiblio.org/freetds/stable/

也可以点击这里下载 提取码: fpmw
下载到本地后,上传到目标服务器,然后解压tgz包安装:
# 解压
tar zxvf freetds-stable.tgz
cd freetds-0.91
# 编译安装 ---耐心等待执行完成
./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static make && make install # 配置freetds:
echo "/usr/local/freetds/lib" >> /etc/ld.so.conf.d/freetds.conf
# 然后运行以下指令使配置生效
ldconfig -v
到此没有出现异常的话,基本上freetds包已安装完成!
接下来重头戏,重新执行安装:pymssql-2.1.1.tar.gz,到相应目录下执行: python setup.py install ---耐心等待
.....................省略部分输出...............
creating 'dist/pymssql-2.1.1-py2.7-linux-x86_64.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing pymssql-2.1.1-py2.7-linux-x86_64.egg
creating /usr/local/lib/python2.7/dist-packages/pymssql-2.1.1-py2.7-linux-x86_64.egg
Extracting pymssql-2.1.1-py2.7-linux-x86_64.egg to /usr/local/lib/python2.7/dist-packages
Adding pymssql 2.1.1 to easy-install.pth file Installed /usr/local/lib/python2.7/dist-packages/pymssql-2.1.1-py2.7-linux-x86_64.egg
Processing dependencies for pymssql==2.1.1
Finished processing dependencies for pymssql==2.1.1
按耐不住内心的小激动,OK,验证下是否安装成功:pip list 查看安装情况

# python环境下执行导入操作:
root@2bb33e0d50af:/mnt/tt_package/pymssql-2.1.1# python
Python 2.7.9 (default, Sep 25 2018, 20:42:16)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pymssql
>>>
不容易~ 一波三折~ 搞定啦!!!
如果提示缺少包:setuptools-git
到下面地址下载:
https://pypi.org/project/setuptools-git/#files
PS: 虽然我按照上边的流程,最终安上了,但是小伙伴们可能遇到新的问题,如果有新的情况,欢迎留言区补充,大家共同学习进步。
运维笔记--Debian/Ubuntu系统离线安装pymssql,连接SqlServer的更多相关文章
- Linux系统运维笔记(五),CentOS 6.4安装java程序
Linux系统运维笔记(五),CentOS 6.4安装java程序 用eclipse编译通的java程序,现需要实施到服务器.实施步骤: 一,导出程序成jar包. 1,在主类编辑界面点右健,选 ru ...
- Linux系统运维笔记(四),CentOS 6.4安装 MongoDB
Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...
- Linux系统运维笔记(四),CentOS 6.4安装Nginx
Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...
- 在Debian/Ubuntu系统中安装*.sh与*.bin文件
在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...
- Linux系统运维笔记(一),查看系统版本和设置系统时间
Linux系统运维笔记 查看系统版本和设置系统时间 查看系统版本 lsb_release -a (适用于所有的linux,包括Redhat.SuSE.Debian等发行版,但是在debian下要安装l ...
- Linux系统运维笔记(三),设置IP和DNS
Linux系统运维笔记(三),设置IP和DNS 手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. vi /etc/sysconfig/network-scripts/ifcfg ...
- Linux系统运维笔记(二),Linux文件编辑命令
Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...
- 从零到一,利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernetes v1.10.0
说明 初步接触kubernets,记录学习过程 本教程目的利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernets v1.10.0 环境信息 节点IP地址 角色 ...
- Linux系统运维笔记(6),CentOS 7.6双网卡路由配置
Linux系统运维笔记(6),CentOS 7.6双网卡路由配置. 一,先确认系统版本: [root@localhost ~]# cat /etc/redhat-releaseCentOS Linux ...
随机推荐
- Prometheus学习笔记(1)Prometheus架构简介
Prometheus简介和架构 Prometheus 是由 SoundCloud 开源监控告警解决方案.架构图如下: 如上图,Prometheus主要由以下部分组成: Prometheus Serve ...
- Httpd服务进阶知识-LAMP架构概述
Httpd服务进阶知识-LAMP架构概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LAMP架构概述 1>.什么是LAM(M)P架构 L: linux A: apa ...
- Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集
Httpd服务入门知识-Httpd服务常见配置案例之设定默认字符集 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看生产环境中使用的字符集案例 1>.查看腾讯设置的默认 ...
- zabbix--告警消息内容更改
zabbix 告警消息内容更改 自带的消息内容模板发送出来的消息着实有点丑陋,再加之是英文,这就让我有点尴尬了. 如下默认的消息内容: 更改过后的效果: 操作步骤 编辑默认的Report proble ...
- MTU是什么?
MTU是Maximum Transmission Unit的缩写. 意思是网络上传送的最大数据包. MTU的单位是字节. 大部分网络设备的MTU都是1500.如果本机的MTU比网关的MTU大,大的数据 ...
- PHP、asp、aspx、JSP一句话
PHP.asp.aspx.JSP一句话 原文地址:https://www.cnblogs.com/JoEcO01/p/11556413.html 1.asp一句话木马: <%eval requ ...
- bzoj1115&&POJ1704&&HDU4315——阶梯Nim
BZOJ1115 题意:阶梯Nim游戏大意:每个阶梯上有一堆石子,两个人在阶梯上玩推石子游戏.每人可以将某堆的任意多石子向左推一阶,所有的石子都推到阶梯下了即算成功,即不能推的输. 分析:根据阶梯Ni ...
- LVS是什么及作用?
LVS的概念和重要性 LVS: 概念:是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统 作用:举例 像有三个小区,但是工作的时间和休息的时间不一样 ...
- CF1245F: Daniel and Spring Cleaning
CF1245F: Daniel and Spring Cleaning 题意描述: 给定区间\([L,R]\),其中 \((0\leq L,R\leq 10^9)\),问在区间内有多少数对\((x,y ...
- 不要轻易在java ext 目录放任何三方jar包
今天在编写一个简单spi 应用demo的时候,在编译时总有一个其他的错误,如下: ERROR Failed to execute goal org.apache.maven.plugins:maven ...