golang调用python方案列表
- go-python包
- qiniu/py包
- google的grumpy
- http服务
- 命令行调用
go-python
执行
go get github.com/sbinet/go-python
- 第一个报错是找不到pkg-config,这个是由于mac环境导致的,解决方案
brew install pkg-config
- 第二个报错如下
# pkg-config --cflags python-2.7
Package python-2.7 was not found in the pkg-config search path.
Perhaps you should add the directory containing `python-2.7.pc'
to the PKG_CONFIG_PATH environment variable
No package 'python-2.7' found
pkg-config: exit status 1
解决方案为
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/System/Library/Frameworks/Python.framework/Versions/2.7/lib/pkgconfig
- 在执行过程中,keras包报错
invalid memory address or nil pointer dereference
无法解决
qiniu/py
- 需要将python代码放到golang中去执行
- 同样存在机器学习包支持的问题
google的grumpy
- Grumpy是将Python源码编译为Go源代码,然后将其编译为本地代码
- 对于机器学习相关包的支持不足
http服务
- 不可行,需要每次启动docker就默认启动服务,而且服务会更容易中断
命令行调用
- 传入参数使用docopt来做,参考资料
- golang操作json代码
package main
import (
"encoding/json"
"fmt"
"os"
)
type ConfigStruct struct {
Host string `json:"host"`
Port int `json:"port"`
AnalyticsFile string `json:"analytics_file"`
StaticFileVersion int `json:"static_file_version"`
StaticDir string `json:"static_dir"`
TemplatesDir string `json:"templates_dir"`
SerTcpSocketHost string `json:"serTcpSocketHost"`
SerTcpSocketPort int `json:"serTcpSocketPort"`
Fruits []string `json:"fruits"`
}
type Other struct {
SerTcpSocketHost string `json:"serTcpSocketHost"`
SerTcpSocketPort int `json:"serTcpSocketPort"`
Fruits []string `json:"fruits"`
}
func main() {
jsonStr := `{"host": "http://localhost:9090","port": 9090,"analytics_file": "","static_file_version": 1,"static_dir": "E:/Project/goTest/src/","templates_dir": "E:/Project/goTest/src/templates/","serTcpSocketHost": ":12340","serTcpSocketPort": 12340,"fruits": ["apple", "peach"]}`
//json str 转map
var dat map[string]interface{}
if err := json.Unmarshal([]byte(jsonStr), &dat); err == nil {
fmt.Println("==============json str 转map=======================")
fmt.Println(dat)
fmt.Println(dat["host"])
}
//json str 转struct
var config ConfigStruct
if err := json.Unmarshal([]byte(jsonStr), &config); err == nil {
fmt.Println("================json str 转struct==")
fmt.Println(config)
fmt.Println(config.Host)
}
//json str 转struct(部份字段)
var part Other
if err := json.Unmarshal([]byte(jsonStr), &part); err == nil {
fmt.Println("================json str 转struct==")
fmt.Println(part)
fmt.Println(part.SerTcpSocketPort)
}
//struct 到json str
if b, err := json.Marshal(config); err == nil {
fmt.Println("================struct 到json str==")
fmt.Println(string(b))
}
//map 到json str
fmt.Println("================map 到json str=====================")
enc := json.NewEncoder(os.Stdout)
enc.Encode(dat)
//array 到 json str
arr := []string{"hello", "apple", "python", "golang", "base", "peach", "pear"}
lang, err := json.Marshal(arr)
if err == nil {
fmt.Println("================array 到 json str==")
fmt.Println(string(lang))
}
//json 到 []string
var wo []string
if err := json.Unmarshal(lang, &wo); err == nil {
fmt.Println("================json 到 []string==")
fmt.Println(wo)
}
}
- 命令行
python modelchain_lr.py --p_batch_size=128 --p_epochs=20 --p_max_rounds=200 --p_verbosity=1 --p_inc_cutoff=-0.01 --p_p_cutoff=0.25 --p_rb_tolerance=16
# setup channel
peer channel create -o orderer.chainplaza.com:7050 -c chainplaza -f /etc/chainplaza/conf/material/chainplaza.tx
# join channel
CORE_PEER_MSPCONFIGPATH=/etc/chainplaza/conf/crypto/peerOrganizations/org1.chainplaza.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer2.org1.chainplaza.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
peer channel join -b chainplaza.block
# install and instantiate modelchain
peer chaincode install -p github.com/chainplaza/chaincode/test -n modelchain -v 0
peer chaincode instantiate -n modelchain -v 0 -c '{"Args":[]}' -C chainplaza
# invoke modelchain
peer chaincode invoke -n modelchain -c '{"Args":["modelchain"]}' -C chainplaza
Install anaconda
cd /tmp
curl -O https://repo.anaconda.com/archive/Anaconda2-5.2.0-Linux-x86_64.sh
chmod +x Anaconda2-5.2.0-Linux-x86_64.sh
./Anaconda2-5.2.0-Linux-x86_64.sh
source /root/.bashrc
cd -
pip install requirements.txt