场景描述:

开始之前,先对Debian和Ubuntu操作系统做个了解,两者都是Linux阵营中很有影响力的发行版本,可以简单理解成“Ubuntu源自Debian,两者系统操作命令基本相同,相比Ubuntu,Debian更加稳定。

关于Debian和Ubuntu的详细异同可以点击此处

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的更多相关文章

  1. Linux系统运维笔记(五),CentOS 6.4安装java程序

    Linux系统运维笔记(五),CentOS 6.4安装java程序 用eclipse编译通的java程序,现需要实施到服务器.实施步骤: 一,导出程序成jar包. 1,在主类编辑界面点右健,选  ru ...

  2. Linux系统运维笔记(四),CentOS 6.4安装 MongoDB

    Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...

  3. Linux系统运维笔记(四),CentOS 6.4安装Nginx

    Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...

  4. 在Debian/Ubuntu系统中安装*.sh与*.bin文件

    在Debian/Ubuntu系统中安装*.sh与*.bin文件的基本方法.一,安装*.sh文件运行命令行至文件目录下,执行:sudo sh *.sh直接运行在命令行中执行:sudo chmod +x ...

  5. Linux系统运维笔记(一),查看系统版本和设置系统时间

    Linux系统运维笔记 查看系统版本和设置系统时间 查看系统版本 lsb_release -a (适用于所有的linux,包括Redhat.SuSE.Debian等发行版,但是在debian下要安装l ...

  6. Linux系统运维笔记(三),设置IP和DNS

    Linux系统运维笔记(三),设置IP和DNS 手工配置静态的IP地址 也就是手工配置IP地址.子网掩码.网关和DNS. vi /etc/sysconfig/network-scripts/ifcfg ...

  7. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  8. 从零到一,利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernetes v1.10.0

    说明 初步接触kubernets,记录学习过程 本教程目的利用kubeadm在ubuntu server 16.04 64位系统离线安装kubernets v1.10.0 环境信息 节点IP地址 角色 ...

  9. Linux系统运维笔记(6),CentOS 7.6双网卡路由配置

    Linux系统运维笔记(6),CentOS 7.6双网卡路由配置. 一,先确认系统版本: [root@localhost ~]# cat /etc/redhat-releaseCentOS Linux ...

随机推荐

  1. z = z*z + c的分型图如何画

    使用python的图形库. 环境:conda+jupyter notebook 代码如下: import numpy as np from PIL import Image from numba im ...

  2. k8s 挂载卷介绍(四)

    kubernetes关于pod挂载卷的知识 首先要知道卷是pod资源的属性,pv,pvc是单独的资源.pod 资源的volumes属性有多种type,其中就包含有挂载pvc的类型.这也帮我理清了之间的 ...

  3. docker中使用阿里云的apt源安装各种实用工具

    今天想在docker中安装vim工具,还有其他的软件等等,如果你直接执行apt-get install vim是没有用的,会显示: root@7d43d83fd3a8:/etc/nginx# apt- ...

  4. Java并发编程-JUC-CountDownLatch 倒计数门闩器-等待多线程完成再放行 -一次性使用

    如题 (总结要点) CountDownLatch 倒计数门闩器, 让1-n-1个线程等待其他多线程完成工作. (Excel的多个Sheet的解析,最终等待解析完毕后;要实现主线程等待所有线程完成she ...

  5. Consul 的 Docker 镜像使用

    1.镜像官方网址:https://hub.docker.com/_/consul 2.pull 镜像: docker pull consul:1.6.0 3.创建容器(默认http管理端口:8500) ...

  6. 【IIS】跨域(转)

    Access to XMLHttpRequest at 'http://*****/.dae' from origin 'http://192.168.198.21:22222' has been b ...

  7. springcloud_Hystrix(熔断器)

    为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保证服 ...

  8. (尚031)Vue_案例_自定义事件(组件间通信第2种方式:vue自定义事件)

    自定义事件: 我们知道,父组件使用prop传递数据的子组件,但子组件怎么跟父组件通信呢? 这个时候Vue的自定义事件系统就派得上用场了. 自定义事件知道两件事: (1).绑定 (2).触发 注意:$o ...

  9. 关于singer elt 的几篇很不错的文章

    以下是链接来自singer 团队的实践,很不错,值得学习 参考连接 https://www.stitchdata.com/blog/100-billion-records-later-refining ...

  10. A1137 | 录数据查询模拟

    这应该是比较简单的一个模拟题,但是考试的时候花了较长的时间,并且最后一个case没过,丢了6分.这题的通过率不高,可见最后一个case还是有挑战性的. 考试的时候想的是在录数据的时候建立一个[ID]到 ...