【问题标题】:Cannot install pact-python: File is not a zip file无法安装 pact-python:文件不是 zip 文件
【发布时间】:2018-05-26 09:39:17
【问题描述】:

我正在尝试安装 pact-python ......仅此而已。 我已经尝试过使用 virtualenv 并且没有尝试过,仍然遇到同样的错误。 我正在跑步:pip install pact-python

我还尝试添加标志以不使用缓存进行安装,--no-cache-dir

我在 Windows 10 上使用 python 2.7.14。

输出:

pip install pact-python --no-cache-dir
收集协议-python
  下载 pact-python-0.10.0.tar.gz
已满足要求:在 c:\rep\test_project\env\lib\site-packages 中单击>=2.0.0(来自 pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 psutil>=2.0.0(来自 pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 requests>=2.5.0(来自 pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的六个>=1.9.0(来自 pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 subprocess32(来自 pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 chardet=3.0.2(来自 requests>=2.5.0->pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 certifi>=2017.4.17(来自 requests>=2.5.0->pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 urllib3=1.21.1(来自 requests>=2.5.0->pact-python)
已满足要求:c:\rep\test_project\env\lib\site-packages 中的 idna=2.5(来自 requests>=2.5.0->pact-python)
安装收集的包:pact-python
  为 pact-python 运行 setup.py install ... 错误
    命令 c:\rep\test_project\env\scripts\python.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\212683~1\\appdata\\local\\temp 的完整输出\\pip-build-b0yskn\\pact-python\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n ', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record c:\users\212683~1\appdata\local\temp\pip-tbudil -record\install-record.txt --single-version-externally-managed --compile --install-headers c:\rep\test_project\env\include\site\python2.7\pact-python:
    运行安装
    运行构建
    运行 build_py
    创建构建
    创建构建\库
    创建 build\lib\pact
    复制 pact\constants.py -> build\lib\pact
    复制 pact\consumer.py -> build\lib\pact
    复制 pact\matchers.py -> build\lib\pact
    复制 pact\pact.py -> build\lib\pact
    复制 pact\provider.py -> build\lib\pact
    复制 pact\verify.py -> build\lib\pact
    复制 pact\__init__.py -> build\lib\pact
    复制 pact\__version__.py -> build\lib\pact
    运行 install_lib
    创建 c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\constants.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\consumer.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\matchers.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\pact.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\provider.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\verify.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\__init__.py -> c:\rep\test_project\env\Lib\site-packages\pact
    复制 build\lib\pact\__version__.py -> c:\rep\test_project\env\Lib\site-packages\pact
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\constants.py 到 constants.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\consumer.py 到 consumer.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\matchers.py 到 matchers.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\pact.py 到 pact.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\provider.py 到 provider.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\verify.py 到 verify.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\__init__.py 到 __init__.pyc
    字节编译 c:\rep\test_project\env\Lib\site-packages\pact\__version__.py 到 __version__.pyc
    运行 install_egg_info
    运行 egg_info
    将要求写入 pact_python.egg-info\requires.txt
    写 pact_python.egg-info\PKG-INFO
    将顶级名称写入 pact_python.egg-info\top_level.txt
    将dependency_links 写入pact_python.egg-info\dependency_links.txt
    将入口点写入 pact_python.egg-info\entry_points.txt
    读取清单文件'pact_python.egg-info\SOURCES.txt'
    阅读清单模板'MANIFEST.in'
    未找到与“pact\test”匹配的先前包含的目录
    未找到与“pact\bin”匹配的先前包含的目录
    没有找到与“e2e”匹配的先前包含的目录
    编写清单文件'pact_python.egg-info\SOURCES.txt'
    将 pact_python.egg-info 复制到 c:\rep\test_project\env\Lib\site-packages\pact_python-0.10.0-py2.7.egg-info
    运行 install_scripts
    将 pact-verifier-script.py 脚本安装到 c:\rep\test_project\env\Scripts
    将 pact-verifier.exe 脚本安装到 c:\rep\test_project\env\Scripts
    将 pact-verifier.exe.manifest 脚本安装到 c:\rep\test_project\env\Scripts
    将已安装文件列表写入 'c:\users\212683~1\appdata\local\temp\pip-tbudil-record\install-record.txt'
    回溯(最近一次通话最后):
      文件“”,第 1 行,在
      文件“c:\users\212683~1\appdata\local\temp\pip-build-b0yskn\pact-python\setup.py”,第 139 行,在
        设置(**setup_args)
      文件“c:\rep\test_project\env\lib\site-packages\setuptools\__init__.py”,第 129 行,在设置中
        返回 distutils.core.setup(**attrs)
      文件“c:\python27\Lib\distutils\core.py”,第 151 行,在设置中
        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:\users\212683~1\appdata\local\temp\pip-build-b0yskn\pact-python\setup.py”,第 54 行,运行中
        install_ruby_app(bin_path)
      文件“c:\users\212683~1\appdata\local\temp\pip-build-b0yskn\pact-python\setup.py”,第 92 行,在 install_ruby_app
        使用 ZipFile(path) 作为 f:
      __init__ 中的文件“c:\python27\Lib\zipfile.py”,第 770 行
        self._RealGetContents()
      _RealGetContents 中的文件“c:\python27\Lib\zipfile.py”,第 811 行
        raise BadZipfile, "文件不是 zip 文件"
    zipfile.BadZipfile:文件不是 zip 文件

    --------------------------------------
命令 "c:\rep\test_project\env\scripts\python.exe -u -c "import setuptools, tokenize;__file__='c:\\users\\212683~1\\appdata\\local\\temp\\ pip-build-b0yskn\\pact-python\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record c:\users\212683~1\appdata\local\temp\pip-tbudil-record \install-record.txt --single-version-externally-managed --compile --install-headers c:\rep\test_project\env\include\site\python2.7\pact-python" 失败,错误代码为 1 c:\users\212683~1\appdata\local\temp\pip-build-b0yskn\pact-python\

当我尝试查看此文件c:\users\212683~1\appdata\local\temp\pip-build-b0yskn\pact-python\setup.py 以了解发生了什么时,它不存在。我的假设是这可能只在安装期间使用。

预期:安装成功。

实际:

 _RealGetContents 中的文件“c:\python27\Lib\zipfile.py”,第 811 行
        raise BadZipfile, "文件不是 zip 文件"
    zipfile.BadZipfile: 文件不是 zip 文件

编辑: 我一直在调查,在setup.py of pact-python 中看起来像是安装了一个 ruby​​ 应用程序。

我确实有一个C:\rep\test_project\env\Lib\site-packages\pact\bin\win32.zip,但它似乎是空的。

编辑 2: 所以我发现在setup.py 中,它正在构建一个uri 来下载pact-ruby-standalone。构建的 uri 是 https://github.com/pact-foundation/pact-ruby-standalone/releases/download/v1.1.1/pact-1.1.1-win32.zip

我的猜测是下载失败,因此文件中没有任何内容,所以当代码到达Zipfile(path) 时,win32.zip 中没有任何内容,然后无法提取任何内容?对此进行调查。

【问题讨论】:

    标签: python python-2.7 pact


    【解决方案1】:

    我们发现我们的内部代理由于某种原因无法处理下载文件的请求。

    我们正在内部寻找解决方案,以更好地管理此类事情。

    【讨论】:

      【解决方案2】:

      祝代理好运。如果您对 Ruby 代码感兴趣,请阅读 Pact History(以下相关引用):https://docs.pact.io/about_pact/history.html

      很快,很明显 Javascript UI 将从使用 Pact 及其后端 API 中受益匪浅。在折腾了用另一种语言再次实现 Pact 的想法之后,决定包装 Ruby 实现(它被打包为一个独立的可执行文件)以避免维护负担和实现不匹配的可能性。这成为用于以下所有 Pact 实现的模式。每种语言都实现了 Pact DSL 和模拟服务/验证器客户端,并在后台调用 Ruby 模拟服务进程/验证器。

      【讨论】:

        【解决方案3】:

        抱歉,忘记发布决议了。事实证明,python-pact 被设置为下载 ruby​​-pact,因为上面提到的 Beth Skurrie 协议实现是围绕着 ruby​​ 实现的。

        发生的事情是我的代理是在我的会话中设置的,而不是全局设置,这允许 pip 开始安装 pact-python 但是当 pact-python 伸手去执行 ruby​​ 时,我认为这是一个 http 下载或其他东西,代理我的会话中没有使用,因此将 .zip 留空。

        这导致了最初描述的错误。

        希望有一天这对使用代理的人有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-20
          • 2022-12-12
          • 2016-05-16
          • 2015-09-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多