Anaconda环境迁移(离线,包括安装包)和Ubuntu连接SqlServer2008

Ubuntu下连接SqlServer,内网环境部署项目,无法访问公网。

一、开发机器上的Anaconda环境打包

项目开发时处在公网环境,已经安装好所需的各种python模块。python包通过conda、apt-get、pip等方式安装。

笔者在base环境进行的这个项目开发,打包前先将base环境复制:

conda create -n base_env --clone base 

克隆base来创建一个名为base_env的副本

cd anaconda3

cd envs/   

该目录下存有刚刚克隆的base_env副本

tar -zcvf base_env.tar.gz ./base_env/

直接将base_env文件夹打包

base_env.tar.gz就是在内网环境下所需的anaconda环境,其中包含在开发机器上,base环境下安装的所有python包。

在进行该部分工作时,笔者还网上看到联网环境下的anaconda环境迁移:

导出环境:

conda env export > environment.yaml

复现该环境

conda env create -f environment.yaml

这种方法需要保持联网,相当于保存你之前的python包列表,在新机器上给你自动安装。

二、新机器(仍为Ubuntu)上的Anaconda安装

Anaconda的安装比较简单,网上有很多博客教程。我习惯安装在 /home/hostname/ 目录下。

cd /home/hostname/

bash bash Anaconda3-2019.10-Linux-x86_64.sh

一路填yes,不建议直接敲回车,因为我在安装过程中遇到 by running conda init 这个选项,它默认是no,敲回车即为no,以后每次用anaconda都需手动加载环境变量,很麻烦。如若一路回车,建议卸载重装。

三、导入base_env环境,并激活

cd anaconda3
cd envs/

在该文件夹下解压 base_env.tar.gz

激活环境

conda activate base_env

这里未探究默认启动base_env环境,重启计算机后仍为base,需要手动激活环境。

四、安装freetds以访问SqlServer

我在base_env环境下运行我的代码,但是出现了错误:

ImportError: libsybdb.so.5: cannot open shared object file: No such file or dictionary

按道理不应该啊,所需python包都在啊,而且我还特意通过conda list查看过已安装的所有python包,pymssql也有。于是,百度:

http://www.mamicode.com/info-detail-2153262.html

感谢博主分享,虽然我并未看懂原因,但是可以解决问题,通过一下命令验证成功:

sudo apt-get install freetds-dev

虽然验证成功,但是我的实际部署环境不可访问外网,所以需要下载离线包:

下载地址:http://www.freetds.org

安装配置,参考一下两篇博客:

https://www.xuebuyuan.com/721039.html

https://www.cnblogs.com/hellojesson/p/11481502.html

我将下载好的 freetds-1.1.24.tar.gz 放在 /home/hostname/ 目录下,并将其解压。

cd freetds-1.1.24
sudo ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared--enable-static
sudo make
sudo make install
sudo echo "/usr/local/freetds/lib" >> /etc/ld.so.conf.d/freetds.conf
sudo ldconfig

 实际部署需要根据freestds和SqlServer版本确定tdsver版本号:

https://www.freetds.org/userguide/

https://www.freetds.org/userguide/choosingtdsprotocol.htm

若需要文件权限,直接 sudo chmod 777。

五、启动程序

 这一步直接 python test.py 就好了。

PS:我在局域网下进行测试,程序在Ubuntu16.04上,SqlServer在另一台win10上。出现以下错误:

pymssql.OperationalError: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (SZS\\SQLEXPRESS)\n')

我ping了一下win10的IP,发现能通,而且win10可以远程连接Ubuntu上的mysql,找了很长时间原因,网上教程多为以下解决方案:https://www.cnblogs.com/xifengmo/p/10993287.html

但是我发现我的SqlServer网络配置全都没问题,端口为默认1433。

最后想到防火墙的问题,关掉Windows防火墙,成功。 

你可能感兴趣的:(PyMSSQL,Python)