在Ubuntu系统上需要golang调用python的操作,Ubuntu虽然自带python,但是golang调用python目前只能用python3.7版本,所以就必须把Ubuntu自带的python改成3.7版本。

之前我写了个在线安装配置python环境的教程:
Ubuntu在线配置:golang调用python环境

后来发现在线安装配置的有两个问题:
1.必须联网,在有的现场服务器,是严格要求服务器不能联网的,这样就太限制了。
2.在线安装配置的python3.7没有pip,关键pip这玩意儿单独安装很难把环境装对,特麻烦。
所以为了解决这两个问题,又研究了一下怎么离线配置python3.7

如果之前有按照我那个教程联网配置过python3.7,需要执行以下几步清空之前的python3.7,如果没有配置则不需要执行:

sudo apt-get remove --auto-remove python3.7
sudo apt-get purge python3.7
sudo rm -rf /usr/lib/x86_64-linux-gnu/pkgconfig/python3.pc

修改环境变量,在线配置和离线配置的python地址不一样 :

export PKG_CONFIG_PATH=/usr/local/python3.7/lib/pkgconfig/

-----------------------------------滑稽的分割线-----------------------------------
离线配置开始
需要先下载好三个包:
zlib1g-dev:
解压安装python3.7时需要用到,注意要和系统的zlib1g 的版本一致。我系统的zlib1g是zlib1g_1.2.11.dfsg-2ubuntu1.2_amd64版本,我原本想找个同样版本的zlib1g-dev,但是只找到zlib1g-dev_1.2.11.dfsg-2ubuntu1.3_amd64.deb的版本,虽然安装的时候会报个错,但是不影响安装python3.7

命令查询zlib1g 的版本:

dpkg -l|grep zlib1g

libffi-dev:
交叉编译工具,没有这个安装会有问题,需要注意的是,也必须和系统版本对应,我系统是Ubuntu20.04.3版本,libffi-dev是libffi-dev_3.3-4_amd64.deb版本

命令查询libffi-dev的版本:

dpkg -l|grep libffi-dev

Python-3.7.13.tgz:
python3.7的离线安装包

下载好包后,拷贝到Ubuntu系统中,就可开始配置环境了
下载好zlib1g-dev包后,离线安装(后面包名根据自己情况而改):

sudo dpkg -i zlib1g-dev_1.2.11.dfsg-2ubuntu1.3_amd64.deb

下载好libffi-dev包后,离线安装(后面包名根据自己情况而改):

sudo dpkg -i libffi-dev_3.3-4_amd64.deb

解压python3.7到当前目录,安装完之后,解压的文件可以删除:

sudo tar -zxvf Python-3.7.13.tgz
cd Python-3.7.13
sudo ./configure --prefix=/usr/local/python3.7 --enable-shared
sudo make
sudo make install

拷贝文件到/usr/lib/目录:

sudo cp /usr/local/python3.7/lib/libpython3.7m.so.1.0 /usr/lib/

创建新的软链接:

sudo ln -s /usr/local/python3.7/bin/python3 /usr/bin/python3.7
sudo ln -s /usr/local/python3.7/bin/pip3 /usr/bin/pip3

配置python环境变量
编辑环境变量文件:

vim ~/.bashrc

在文件最后加上:

# python
alias python2=/usr/bin/python2.7
alias python3=/usr/bin/python3.7
alias python=python3
export PKG_CONFIG_PATH=/usr/local/python3.7/lib/pkgconfig/

重新加载 profile 文件:

source ~/.bashrc

进入解压后的python同级目录,删除它(安装完成就没用了):

sudo rm -rf Python-3.7.13

可以查询一下python版本和pip版本:

python --version
pip3 --version

到此运行环境配置完毕,如果需要编译环境,接着把golang配置上就行了

安装包自行到官网去下载,下载好后,把golang拷贝到Ubuntu上面,解压golang:

sudo tar -zxvf go1.17.4.linux-amd64.tar.gz -C /usr/local/

配置golang环境变量
编辑环境变量文件:

vim ~/.bashrc

在文件最后加上:

# golang
export GOPATH=/home/l/jobs/GOPATH
export GOROOT=/usr/local/go
export GOARCH=amd64
export GOOS=linux
export GOBIN=$GOROOT/bin/
export GOTOOLS=$GOROOT/pkg/tool/
export GOPROXY=https://proxy.golang.com.cn,direct
export GOPRIVATE=git.mycompany.com,github.com/my/private

# path
export PATH=$PATH:$GOBIN:$GOTOOLS

注意:
GOPATH:根据自定义的地址来配
GOARCH:根据Linux系统情况而定
GOPROXY:golang代理,配置根据goproxy.io 网站更新而改变
GOPRIVATE:golang代理,配置根据goproxy.io 网站更新而改变

重新加载profile文件:

source ~/.bashrc

给go赋权限,要进入/usr/local/目录执行:其实这一步不给也行,但是我这边项目因为有些包没有权限下载,所以就给了:

cd /usr/local/
sudo chmod -R 777 go/

到此编译环境配置完成