如何修复这个 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 错误 - 元素数
如何在使用 cx_Freeze 6.0b1 冻结的 Linux 上修复 python 3.7.3 脚本上的 numpy 依赖项路径?