记一个golang安装go-python3(Ubuntu)

记一个golang安装go-python3(Ubuntu)

记一个golang调用python3(Ubuntu)

    • 一、配置环境
      • 1. 安装子系统。
      • 2. 安装go环境。
      • 3. 安装python3.7。
      • 3. 安装python3.7-dev
        • 直接安装
        • 换源
        • aptitude的使用
        • 删除错误下载
    • 二、配置pkg-config
      • 1. 简述
      • 2. 创建pc文件
    • 三、安装go-python3
    • 四、其他

1. 安装子系统。

我这里使用的是win子系统——WSL(Windows Subsystem for Linux),去Microsoft Store安装一个即可。
版本是记一个golang安装go-python3(Ubuntu)
如果还有别的心思,还可以装一个lxrunoffline玩玩,迁移子系统的安装路径。
另外,默认是没有复制粘贴功能的,可以右键图标打开默认值设置
记一个golang安装go-python3(Ubuntu)
 

2. 安装go环境。

找个位置装go

wget https://golang.org/dl/go1.15.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.15.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version

进入系统,安装go,配置代理,配置其他环境……

su root

3. 安装python3.7。

apt-get install python3.7ln -s /usr/bin/python3.7 /usr/bin/python

3. 安装python3.7-dev

为了能够正确调用python3.7,跨语言使用python3.7,linux下必须下载这个python3.7-dev,这个python3.7-dev包含了python3.7的库文件(libpython3.7m.a和libpython3.7.so),相当于windows的VC下编译的lib文件。

直接安装

试试这个指令

apt-get install python3.7-dev
apt-get install python3-dev

细心留意一下,apt-get install 后有提示即将安装什么package的,不要用急着y/n

如果不小心下错了,继续阅读,后边有解决方案。

如果成功下载,直接转到配置pkg-config。后边是给下载不成功的准备的。

换源

针对apt install 后提示E: Unable to locate package。换个源即可

vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ vivid main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ vivid-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ vivid-backports main restricted universe multiverse

如果源用不了,就换另外一个,总有一个能用的。

apt-get updateapt-get upgradeapt-get install python3.7-dev

aptitude的使用

查网上资料,有说,如果apt-get安装不了python-dev的话,用aptitude。
什么是aptitude?

aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。系统中不会残留无用的包,整个系统更为干净
——百度百科《aptitude》

换句话说,aptitude就是一个“变种”的apt-get

apt-get install aptitude
aptitude install python3.7-dev

结束安装。

删除错误下载

到这里,我们很可能已经出现了下载错误的问题,没有关系。我们可以:

……
apt-get install aptitude
aptitude remove python3.7-dev
aptitude remove python3-dev
aptitude remove python-dev
……

把下错的删掉。因为用aptitude remove删东西,会把依赖也删掉,很方便。
在/usr/bin路径下,看看不小心下错的东西。

 

go get github.com/DataDog/go-python3

1. 简述

pkg-config是个什么东西?

pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。
——维基百科《pkg-config》

也就是说,其实你在win系统下也可以使用pkg-config。但是我不会,在mingw下放了pkg-config.exe还有其他一大堆东西都没有用,结果照样弹出一大堆错误,心态爆炸,转至WSL。(有兴趣的话,可以自己动手尝试。欢迎交流。)

这个pkg-config其实不仅在操作系统有所应用,在QT上也能看到它的踪迹:
图为C++qt使用python,下为pro文件里添加的内容:

记一个golang安装go-python3(Ubuntu)
可以在Qt Creator里右键项目添加库……进行可视化添加。

记一个golang安装go-python3(Ubuntu)
本质上来说,配置pkg-config就是配置一个可供其他语言调用的环境。
这也是我们一定要下载python-dev的原因,在win操作系统下的python,就已经自带python.lib文件。打开win下的python目录下libs文件夹,可以看到这几个lib文件
记一个golang安装go-python3(Ubuntu)
但是,我们的linux系统里的python没有这个.lib对应的.a文件,也用不了.lib文件,很尴尬,怎么办?这个时候,我们就需要安装python-dev。
如果可以的话,可以卸载了python3.7-dev,重新安装一下,看一下到底多出了什么东西。
多出来这样一个东西(/usr/lib/python3.7或者可能在usr/local/lib/python3.7):
记一个golang安装go-python3(Ubuntu)多出了这样一个文件夹config-3.7m-x86_64-linux-gnu。
记一个golang安装go-python3(Ubuntu)
各种文件一目了然。
 

2. 创建pc文件

pkg-config --list-allgo get github.com/DataDog/go-python3

没有办法,创造办法。

pkg-config --variable pc_path pkg-configvim /etc/profile

Name: 该模块的名字
Description: 模块的简单描述
Version: 版本号。
Cflags: 用于写当前模块的头文件的路径。
Libs: 用于写当前模块的库/依赖库的路径。

这就是python3.pc文件里的内容,Name和Version和Description对着随便填
记一个golang安装go-python3(Ubuntu)
剩下CFlags和Libs。

python python-config.py
cd /usr/lib/python3.7/config-3.7m-x86-linux-gnu
python3.7 python-config.py --cflags
python3.7 python-config.py --libs

记一个golang安装go-python3(Ubuntu)
pkg-config的cflags不需要那么多参数,取前面一截路径即可
记一个golang安装go-python3(Ubuntu)
保存文件,输入
记一个golang安装go-python3(Ubuntu)
一切正常,说明配置成功了。

 

go get github.com/DataDog/go-python3即可,终于没有报其他奇怪的错误,一切调用正常。

分享一个go调用C再调用python的例子:Go语言高级编程
第三章2.10,有兴趣可以分享交流

创作不易,分享本文@原文即可。
或者请作者喝杯咖啡~
记一个golang安装go-python3(Ubuntu)

记一个golang安装go-python3(Ubuntu)相关教程