【问题标题】:Go exec.Cmd() causing Python script to not import module?Go exec.Cmd() 导致 Python 脚本不导入模块?
【发布时间】:2020-08-07 14:10:57
【问题描述】:

我有以下 Go 代码执行外部 Python 脚本。

package main

import (
    "log"
    "os"
    "os/exec"
    "fmt"
)
func main(){

  //Call Python script
  cmd := exec.Command(`C:\Python35\python35.exe`, `C:\...\py_file.py`)
  cmd.Stdout = os.Stdout
  cmd.Stderr = os.Stderr
  log.Println(cmd.Run())

}

它会在 Py 文件中导致此错误:

ImportError: No module named 'youtube_transcript_api'

但是,如果我自己运行 Py 文件,它工作得非常好。它应该输出 JSON。

我错过了什么吗?如果您需要更多信息,请告诉我!

非常感谢, 移动通信

【问题讨论】:

  • 你在使用 python venv 吗?可能是你的 go 代码没有使用 venv
  • 我不这么认为?我正在使用通过 Windows 应用商店安装的 Python 3.5。我很确定它像定期安装的 Python 一样运行。

标签: windows go exec python-3.5


【解决方案1】:

1)窗户

首先让你的python脚本可执行并在环境变量中包含python解释器

例如:

cmd := exec.Command("script.py") //file path C:\...\py_file.py cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr log.Println(cmd.Run())

2)Linux

首先不要忘记让你的python脚本可执行(权限和#!/usr/local/bin/python开头

例如:

cmd := exec.Command("bash", "-c", "python3 script.py")
_, err = cmd.Output()

【讨论】:

  • 感谢您的回复!我不太确定你所说的为 Windows 制作 Python 可执行文件是什么意思。当我在 CMD Prompt 中运行 python3 命令时,它可以工作。但是,我必须指定 python35 exe 在 Go 中的位置。你能告诉我你的意思吗?
  • 使 python 可执行意味着赋予你的脚本可执行权限(默认情况下它是可执行的,不用担心)。只需在您的环境变量中添加 python35 路径即可。
  • 所以我的电脑上同时安装了 py27 和 py35。我所做的是重命名这些文件夹中的 exe,以便将 py35 命名为 python.exe 而不是 python35.exe。出于某种原因,这似乎奏效了!从那里我可以只使用“python”命令而不是使用完整路径。谢谢!
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2021-08-16
相关资源
最近更新 更多