如何修复这个 Python 脚本?

Posted

技术标签:

【中文标题】如何修复这个 Python 脚本?【英文标题】:How can I fix this Python script? 【发布时间】:2012-10-12 19:52:00 【问题描述】:

我正在尝试使用 cvs2svn 将 CVS 存储库转换为 Git,并遵循 on this page 的指示。我到了第 7 步,但运行 git-move-refs.py 时出错:

Traceback (most recent call last):
  File "../../cvs2svn-trunk/contrib/git-move-refs.py", line 23, in ?
    from subprocess import Popen, PIPE, call
ImportError: No module named subprocess

作为参考,这是脚本显示的内容:

usage = 'USAGE: %prog [options]'

import sys
import optparse
from subprocess import Popen, PIPE, call

我不是 Python 专家,但从浏览网页来看,subprocess 似乎是一个标准模块,对吧?我正在使用从 2.6.3 版本的源代码构建的 Python 安装。我缺少什么让这个脚本工作?

【问题讨论】:

subprocess 在 Python 2.4 中引入。你是如何编译这个 Python 包的? 您是否确定您正在运行您编译的 2.6.3,而不是已经安装在其他地方的旧版本? [提示]$ python --version Python 2.6.3 打开python解释器试试import subprocess 剧本不是有某种shebang吗? (#! 行)很可能它使用的是/usr/bin/python,而您已将其安装为/usr/local/bin/python 【参考方案1】:

我猜您的发行版中/usr/bin/python 有一个旧版本(pre-2.4)的 Python,而您编译的 Python 2.6 在其他地方(例如/usr/local/bin/python)。在/usr/bin 之前的路径上有Python 2.6 可执行文件,因此当您从命令行执行python 时,您将获得Python 2.6。

但是,查看cvs2svn source code, git-move-refs.py 的interpreter line 是硬编码为

#!/usr/bin/python

而不是#!/usr/bin/env python,这意味着当您运行脚本时,它使用旧的 Python。

作为一种解决方法,通过将脚本传递给 Python 2.6 解释器来运行脚本:

user@host$ python /path/to/cvs2svn/contrib/git-move-refs.py

【讨论】:

…或者替换脚本中的shebang。我怀疑脚本是直接调用的。 @MichałGórny:说明中的第 7 步说要运行该脚本,因此提问者可能直接调用它。

以上是关于如何修复这个 Python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

GEKKO - 如何修复 Python Gekko Max Equation 错误 - 元素数

如何修复 brew doctor 警告

如何在使用 cx_Freeze 6.0b1 冻结的 Linux 上修复 python 3.7.3 脚本上的 numpy 依赖项路径?

如何修复“在此系统上禁用运行脚本”?

如何修复这个 python 依赖项?

发布到 Google 脚本时如何修复“HTTP 405”?