on master help sign in
prybar-python3 honors $VIRTUAL_ENV (#55)
0e7f1e9Dan Stowell
languages/python3/main.go+34
@@ -9,10 +9,44 @@ package main
9import "C"
9import "C"
10
10
11import (
11import (
12+ "fmt"
13+ "os"
14+ "path"
12 "strings"
15 "strings"
13 "unsafe"
16 "unsafe"
14)
17)
15
18
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+
16type Python struct{}
50type Python struct{}
17
51
18func (p Python) Open() {
52func (p Python) Open() {