在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/
到此编译环境配置完成