@@ -9,10 +9,44 @@ package main
99import "C"
1010
1111import (
12+ "fmt"
13+ "os"
14+ "path"
1215 "strings"
1316 "unsafe"
1417)
1518
19+var programName *C.wchar_t
20+
21+func Py_SetProgramName(name string) error {
22+ cname := C.CString(name)
23+ defer C.free(unsafe.Pointer(cname))
24+
25+ newProgramName := C.Py_DecodeLocale(cname, nil)
26+ if newProgramName == nil {
27+ return fmt.Errorf("fail to call Py_DecodeLocale on '%s'", name)
28+ }
29+ C.Py_SetProgramName(newProgramName)
30+
31+ //no operation is performed if nil
32+ C.PyMem_RawFree(unsafe.Pointer(programName))
33+ programName = newProgramName
34+
35+ return nil
36+}
37+
38+func init() {
39+ name := "python"
40+ virtualEnv, virtualEnvSet := os.LookupEnv("VIRTUAL_ENV")
41+ if virtualEnvSet {
42+ name = path.Join(virtualEnv, "bin", "python")
43+ }
44+ err := Py_SetProgramName(name)
45+ if err != nil {
46+ panic(fmt.Sprintf("cannot set prybar-python3 program name to '%s': %s", name, err))
47+ }
48+}
49+
1650type Python struct{}
1751
1852func (p Python) Open() {