Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

golang调用python #15

Open
guanpengchn opened this issue Aug 10, 2018 · 3 comments
Open

golang调用python #15

guanpengchn opened this issue Aug 10, 2018 · 3 comments
Labels

Comments

@guanpengchn
Copy link
Owner

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
@panchengtao
Copy link

我也总结了下,可以看看 panchengtao/articles#11

@cobolbaby
Copy link

cobolbaby commented Jul 18, 2019

针对提到的"grumpy对于机器学习相关包的支持不足",有无具体的案例呢?@guanpengchn

@guanpengchn
Copy link
Owner Author

@cobolbaby 我也记不清了,只记得当时使用了keras,然后有报错

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants