如何在 Windows 上使用 Python 的“easy_install”……没那么容易

Posted

技术标签:

【中文标题】如何在 Windows 上使用 Python 的“easy_install”……没那么容易【英文标题】:How to use Python's "easy_install" on Windows ... it's not so easy 【发布时间】:2011-04-30 06:59:38 【问题描述】:

在 Windows XP 上安装 Python 2.7 后,然后手动将 %PATH% 设置为 python.exe(为什么 python 安装程序不这样做?),然后安装 setuptools 0.6c11(为什么 python 安装程序不这样做) ?),然后手动将%PATH%设置为easy_install.exe(为什么安装程序不这样做?),我终于尝试使用easy_install安装python包,但是easy_install在无法安装时失败pywin32 包,这是一个依赖项。 如何让 easy_install 在 Windows XP 上正常工作?失败如下:

C:\>easy_install winpexpect
正在搜索 winpexpect
最佳匹配:winpexpect 1.4
处理winpexpect-1.4-py2.7.egg
winpexpect 1.4 已经是 easy-install.pth 中的活动版本

使用 c:\python27\lib\site-packages\winpexpect-1.4-py2.7.egg
处理 winpexpect 的依赖关系
搜索 pywin32>=214
阅读 http://pypi.python.org/simple/pywin32/
阅读 http://sf.net/projects/pywin32
阅读 http://sourceforge.net/project/showfiles.php?group_id=78018
找不到 pywin32>=214 的本地包或下载链接
最佳匹配:无
回溯(最近一次通话最后):
  文件“C:\python27\scripts\easy_install-script.py”,第 8 行,在
    load_entry_point('setuptools==0.6c11', 'console_scripts', 'easy_install')()
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 1712 行,在 main
    with_ei_usage(lambda:
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 1700 行,在 with_ei_usage
    返回 f()
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 1716 行,在
    distclass=DistributionWithoutHelpCommands, **kw
  文件“C:\python27\lib\distutils\core.py”,第 152 行,在设置中
    dist.run_commands()
  文件“C:\python27\lib\distutils\dist.py”,第 953 行,在 run_commands
    self.run_command(cmd)
  文件“C:\python27\lib\distutils\dist.py”,第 972 行,在 run_command
    cmd_obj.run()
  运行中的文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 211 行
    self.easy_install(规范,不是 self.no_deps)
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 446 行,在 easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 481 行,在 install_item
    self.process_distribution(spec, dists[0], deps, "使用")
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 519 行,在 process_distribution
    [要求]、self.local_index、self.easy_install
  解析中的文件“C:\python27\lib\site-packages\pkg_resources.py”,第 563 行
    dist = best[req.key] = env.best_match(req, self, installer)
  文件“C:\python27\lib\site-packages\pkg_resources.py”,第 799 行,在 best_match
    return self.obtain(req, installer) # 尝试下载/安装
  文件“C:\python27\lib\site-packages\pkg_resources.py”,第 811 行,在获取
    返回安装程序(要求)
  文件“C:\python27\lib\site-packages\setuptools\command\easy_install.py”,第 434 行,在 easy_install
    self.local_index
  文件“C:\python27\lib\site-packages\setuptools\package_index.py”,第 475 行,在 fetch_distribution
    返回 dist.clone(location=self.download(dist.location, tmpdir))
AttributeError:“NoneType”对象没有属性“克隆”

【问题讨论】:

@Rafe:这对他一点帮助都没有。 @Sergio Tapia:只是一个建议。 要回答上面的一个问题,Python 安装程序不会修改您的 PATH 变量,因为 1) 它无法在卸载时正确修改 PATH,以及 2) 您可以在同一个上拥有多个 Python 版本系统,这可能会导致意外行为。见bugs.python.org/issue3561 为什么 setuptools 不是标准 Python 发行版的一部分,请参阅 faassen.n--tree.net/blog/view/weblog/2009/11/09/0 布兰登:感谢您的意见。我知道这是一个有点切题的讨论,我不得不说,当你做出艰难的决定时,比如是否设置 PATH 或预加载哪个包管理器,最好的办法是给用户无论如何,他们可能想要做的事情的选项。示例:“将python添加到路径?如果你不知道这是什么意思,请选择yes。[yes] [no]” ... “安装setuptools并设置他们的路径?如果你不知道这是什么意思,请选择是的。[是] [否]”。这不是一个完美的解决方案,但它比将新手派往谷歌要好得多。 【参考方案1】:

如果您使用的是Anaconda's Python 分发版,

可以通过pip安装

pip install setuptools

然后作为模块执行

python -m easy_install

【讨论】:

【参考方案2】:

从以下 URL 复制以下脚本“ez_setup.py”

https://bootstrap.pypa.io/ez_setup.py

并将其复制到您的 Python 位置

C:\Python27>

运行命令

C:\Python27? python ez_setup.py

这将在 Scripts 目录下安装 easy_install

C:\Python27\脚本

从 Scripts 目录运行简易安装 >

C:\Python27\Scripts> easy_install

【讨论】:

【参考方案3】:

我也同意 OP 的观点,即所有这些东西都应该随 Python 一起提供。我想我们将不得不处理它,直到那一天到来。这是一个实际上对我有用的解决方案:

installing easy_install faster and easier

希望对您或遇到同样问题的人有所帮助!

【讨论】:

这对我很有帮助。谢谢! 获取 404:找不到页面【参考方案4】:

如果你使用的是windows 7 64位版本,那么解决方法在这里:http://pypi.python.org/pypi/setuptools

也就是说,你需要下载一个python脚本,运行它,然后easy_install就可以从命令行正常工作了。

附:我同意原始海报说这应该开箱即用。

【讨论】:

【参考方案5】:

一个问题是easy_install 设置为下载和安装.egg 文件或源代码分发(包含在.tgz、.tar、.tar.gz、.tar.bz2 或.zip 文件中)。它不知道如何处理 PyWin32 扩展,因为它们被放置在within a separate installer executable。您需要下载适当的 PyWin32 安装程序文件(适用于 Python 2.7)并自行运行。当您再次运行 easy_install 时(前提是您已正确安装,如 Sergio 的说明中所示),您应该会看到您的 winpexpect 软件包已正确安装。

由于我们谈论的是 Windows 和开源,它通常可能是安装方法的混乱组合,以使事情正常运行。不过,easy_install 肯定比手动编辑配置文件要好。

【讨论】:

感谢您的帮助。通过手动安装 pywin32 exe 安装程序,easy_install 能够正确安装 winpexpect 软件包。但是,当我在 python 中导入该模块时,它会因“ImportError:没有名为资源的模块”而死。这是我需要完成的另一个步骤以使我的 python 环境正常工作吗?还是只是 winpexpect 模块中的一个错误? OK:找到了解决办法:除了手动安装pywin32,我还得卸载pexpect和winpexpect模块,然后只重新安装winpexpect模块。此时一切正常。 让我们公平一点...混乱不是因为 windows 是闭源的,而是因为已经投入了更多的精力来确保安装过程在 linux 上顺利运行,而 windows 是事后才想到的.没有任何理由 easy_install 无法下载包并在需要时使用 MSBuild 为本地系统编译它。【参考方案6】:

一方面,它表示您已经安装了该模块。如果你需要升级它,你应该这样做:

easy_install -U 包名

当然,如果包有一些需要编译的 C 头文件并且您没有安装正确版本的 Visual Studio,那么 easy_install 就不能很好地工作。您可以尝试使用 pip 或分发而不是 easy_install,看看它们是否工作得更好。

【讨论】:

它从未完全安装。它每次都在依赖项上崩溃。它之前可能已部分安装过,但仅此而已。由于此模块适用于 Windows,因此我假设它是预编译的。

以上是关于如何在 Windows 上使用 Python 的“easy_install”……没那么容易的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 InstallShield 在 Windows 上最好地安装 Python + 模块

如何在 Python 上使用 Windows Auth 登录 MSSQL?

如何使 APK 在 WINDOWS 上独立于 Kivy 和 python?

如何使用 Python 2.6 在 Windows 上安装 PyGTK / PyGobject?

如何在 Windows 上使用 Python 的“easy_install”……没那么容易

如何使用 Python 在 Windows 上打开隐藏的应用程序?